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);