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

VS2008 Passing Variables - struct vs struct components - advantages/disadvantages?

本文关键字:结构 优点 缺点 组件 变量 VS2008      更新时间:2023-10-16

我真的希望这不是那些超级基本的问题之一。

总之,我有一个包含47个组件的结构,我正在调用各种函数,这些函数一次使用3到10个组件。

调用以下函数更好吗:
foo(pParam->variable1, pParam->variable2, pParam->variable3)
或者CCD_ 2,然后在函数中使用CCD_?

提前感谢!

您应该通过引用传递结构,这样您就不需要复制所有值:

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.

一般情况下,存在结构,因此可以将数据统一起来。因此,将其拆开并将不同的参数传递给函数是没有意义的
它应该作为一个单独的单元。

我也遇到过类似的情况。分别传递每个组件。这让调用者清楚地知道哪些值是必需的,也让实现者清楚地知道了哪些值是可用的。

如果传递整个结构,那么调用方将不确定他们真正需要填充多少结构。更糟糕的是,函数实现者可能开始引用另一个不总是可用的或不总是有效的结构成员。

在维护过程中,您可能会看到的另一件事是,某些未使用的结构成员可能会被重载,以传递以前没有预料到的新参数,并且字段名称将不再与它们所代表的值匹配。

单独传递所有参数可以让每个人都清楚地了解合同的真实内容,并且可以显式地添加新参数。

我认为最好多考虑一下架构。一个有47个属性的结构,传递给不使用所有属性的各种函数,看起来像贫血域模型。您应该将它拆分为多个类,每个类都包含只能处理类中数据的方法。这样可以避免传递结构(通过类免费获得)和扩展程序的问题。