VS2008传递变量-结构与结构组件-优点/缺点?

问题描述

| 我真的希望这不是那些超级基本的问题之一。 无论如何,我有一个包含47个组件的结构,并且我正在调用各种函数,这些函数一次使​​用3到10个这些组件中的任何一个。 最好像这样调用函数
foo(pParam->variable1,pParam->variable2,pParam->variable3)
 或
foo(pParam)
,然后在函数中使用
pParam->variable1; pParam->variable2; pParam->variable3;
? 提前致谢!     

解决方法

        您应该通过引用传递该结构,这样就不必复制所有值:
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.
总的来说,这里有结构,因此您可以合并数据。因此,将其拆开并将不同的参数传递给函数没有任何意义。 它应作为一个单元保留。     ,        我也遇到过类似情况。分别传递每个组件。这使调用者可以清楚地知道哪些值是必需的,而实现者也可以清楚地知道哪些值是可用的。 如果传递整个结构,则调用者将不确定他们实际需要填充多少结构。更糟糕的是,函数实现者可能开始引用另一个并非始终可用或并非始终有效的结构成员。 在维护过程中,您可能会看到的另一件事是,某些未使用的struct成员可能会重载以传递以前未预期的新参数,并且字段名称将不再与它们表示的值匹配。 分别传递所有参数可以使每个人都清楚合同的真正含义,并且可以明确添加新参数。     ,        我认为最好多考虑一下架构。具有47个属性的结构传递给不使用所有功能的各种功能,看起来像Anemic Domain Model。您应该将其拆分为多个类,每个类都包含仅适用于该类中数据的方法。这样,既可以避免传递结构(通过类免费获得结构),又可以避免扩展程序的问题。