有人認爲使用類或結構來傳遞參數有好處嗎?C++使用結構參數而不是多個參數?
等代替
f(int,float,string)
有
f(Args)
哪裏Args
爲struct
與int
,float
,string
成員。
優點是易於創建多個默認參數並沒有改變函數簽名時,新的論據增加。
有人認爲使用類或結構來傳遞參數有好處嗎?C++使用結構參數而不是多個參數?
等代替
f(int,float,string)
有
f(Args)
哪裏Args
爲struct
與int
,float
,string
成員。
優點是易於創建多個默認參數並沒有改變函數簽名時,新的論據增加。
有人認爲使用類或結構傳遞參數有優勢嗎?
是的,我覺得有一個很大的優勢。
功能上的大參數列表會分散客戶端代碼與語義參數一致性,這可以在適當的struct
或class
內更好地管理。
而且它更靈活地使用struct
,如果附加的(可能是可選的)參數需要在以後添加。
我也想利用結構是較好的:你可以用參數類型和順序繞過喧囂。假設您有foo(A, B)
(對於類型A
和B
)。但仍然foo(b, a)
可能會編譯,這取決於隱含的結構等。
此概念也可以使用某種Context
類推廣。依靠C++ 11 variadic模板,您可以將「參數超集上下文」傳遞給子集。
是否使用包含在類/結構中的一個參數或多個參數取決於參數的含義。
不好用一個結構:
struct Foo
{
char const* source;
char* destination;
};
Foo strcpy(Foo foo);
用好一個結構:的
struct Point
{
int x;
int y;
};
int distanceFromOrigin(Point p) { ... }
代替
int distanceFromOrigin(int x, int y) { ... }
在這裏做魔鬼代言人。這裏也有缺點,主要是語義上的。首先,如果其中一些參數是通過引用傳遞的,另一個通過常量引用,第三個通過const指針和第四個參數傳遞,則需要很多代碼。將要求你明確地寫出參數struct的移動構造函數和默認構造函數,這將很快變得乏味。將成員添加到該結構中也很繁瑣。
我認爲最大的優點是不必依賴於參數順序。依賴順序是容易出錯的,如果你經常改變接口,而改變參數結構,你總是明確地賦值給具有特定語義的成員變量。
例如Direct3D11 ID3D11Device::CreateDepthStencilState功能:傳遞const D3D11_DEPTH_STENCIL_DESC *pDepthStencilDesc
比詢問所需的所有參數要清楚得多。
另外考慮可修改性:在重構過程中,您不需要更改此方法簽名,而只需更改基礎數據結構。我發現這在協同工作時特別有用,其中有人指定接口並且有人需要實現它。