C++ 将结构传递给方法,指示要使用的字段
因此,我需要这个C++ 将结构传递给方法,指示要使用的字段,c++,C++,因此,我需要这个compute()方法以两种方式(运行时可选)处理结构 一种情况是基于a、b和结构S的其他内容(不包括z)来估计某物 其他时候我需要完全相同的计算,但是用z代替a。它们都是相同的类型,具有相同的含义 结构S在API中公开,因此需要存储在这个布局中 高效(compute()经常被调用)的最终解决方案是什么布尔值参数枚举参数?模板参数(如果是,如何实现) 注: compute()是一个相当长的函数,选择a或z只发生一次 如果只有这两种情况,我只会使用bool参数。保持简单。并
compute()
方法以两种方式(运行时可选)处理结构
- 一种情况是基于
、a
和结构b
的其他内容(不包括S
)来估计某物z
- 其他时候我需要完全相同的计算,但是用
代替z
。它们都是相同的类型,具有相同的含义a
S
在API中公开,因此需要存储在这个布局中
高效(compute()
经常被调用)的最终解决方案是什么<代码>布尔值参数<代码>枚举参数?模板参数(如果是,如何实现)
注:
是一个相当长的函数,选择compute()
或a
只发生一次z
bool
参数。保持简单。并妥善记录
或者您可以使用两种方法
computeA
和computeZ
。在本例中,它实际上是关于您对什么感到满意。我将使用枚举。它的效率不比bool高,也不比bool低,但在呼叫站点上可能更清楚:
class C
{
struct S
{
T a;
T2 b;
.
.
.
T z;
};
int compute(S s[]);
}
而不是:
compute(s, UseAB);
compute(s, UseZB);
模板选项是可能的,但可能不会更好;您应该首先尝试常规运行时方式。如果你很关心性能,考虑短代码和简单代码,请制作<代码>(或代码> >内联。此外,关于指针到成员,在这种情况下,我肯定会在BooS上执行枚举,因为真值和字段选择之间没有明确的关系。如果性能相同(或没有任何相关数量的差异),请选择“可读性更强”选项。稍后你会感谢你自己。我肯定会投票支持两种方法的解决方案,因为OP表示该方法会被频繁调用,通过这种方式可以避免传递+1参数的开销。如果这些方法甚至是内联的,那么与一个方法的情况相比,二进制文件中不需要额外的空间。@GézaTörök然而,在问题的注释部分中指出,
compute()
方法相当长,决策只发生一次。如果使用两种方法,它们要么必须几乎相同,要么必须做出决定,然后调用其他方法进行实际工作。我怀疑传递一个额外的参数比调用另一个函数更昂贵。问题是,这种优化是否真的如此之大,以至于产生了一些真正的影响。但我不是专家。我希望有一些方法模板,它指示哪个是字段——什么东西,在Python中是可能的,但可能不是C++中的。这个函数非常连贯,我不想把它分成三部分。接受,因为我选择了最简单的方式。
compute(s, false);
compute(s, true);