【问题标题】:VS2008 Passing Variables - struct vs struct components - advantages/disadvantages?VS2008 传递变量 - 结构与结构组件 - 优点/缺点?
【发布时间】:2011-09-19 19:56:01
【问题描述】:
我真的希望这不是那些超级基本的问题之一。
无论如何,我有一个包含 47 个组件的结构,并且我正在调用各种函数,这些函数一次使用 3 到 10 个这些组件。
这样调用函数是否更好:
foo(pParam->variable1, pParam->variable2, pParam->variable3)
或foo(pParam) 然后在函数中使用pParam->variable1; pParam->variable2; pParam->variable3; ?
提前致谢!
【问题讨论】:
标签:
c++
visual-studio-2008
struct
parameter-passing
【解决方案1】:
我也遇到过类似的情况。分别传递每个组件。这让调用者清楚哪些值是必需的,也让实现者清楚哪些值是可用的。
如果你传递整个结构,那么调用者将不确定他们真正需要填充多少结构。更糟糕的是,函数实现者可能会开始引用另一个不总是可用或不总是有效的结构成员。
您在维护期间可能会看到的另一件事是某些未使用的结构成员可能会被重载以传递以前没有预料到的新参数,并且字段名称将不再匹配它们所代表的值.
单独传递所有参数,让每个人都清楚合约的真正含义,并明确添加新参数。
【解决方案2】:
我认为最好多考虑架构。具有 47 个属性的结构,传递给不使用所有属性的各种函数,看起来像 Anemic Domain Model。您应该将其拆分为类,每个类都包含仅适用于类中数据的方法。这样可以避免传递结构(通过类免费获得)和扩展程序的问题。
【解决方案3】:
你应该通过引用传递结构,这样你就不需要复制所有的值:
void foo(mySturct pParam); //Here the struct will be copy constructed.. relatively large overhead
void foo(Val1 param1, Val2 param2, Val3 param3); // 3 parameters passed by value, the value will be copied.
void foo(mySturct &pParam); //Only the reference to the structure is passed. Single pointer size value is passed.
一般来说,存在结构以便您可以统一数据。所以把它拆开,给函数传递不同的参数是没有意义的。
它应该保持为一个单元。