将结构传递给方法,指示要使用的字段

Pass a structure to a method, indicate which field to use

本文关键字:字段 指示 结构 方法      更新时间:2023-10-16
class C
{
    struct S
    {
        T a;
        T2 b;
        .
        .
        .
        T z;
    };
    int compute(S s[]);
}

所以我需要这个compute()方法来以两种方式(运行时可选(处理结构 S。

  • 一种情况是根据ab和结构S的其他内容来估计某物,不包括z

  • 其他时候我需要完全相同的计算,但取而代之的是z(和代替(a.它们都是相同的类型,具有相同的含义。

结构S在 API 中公开,因此需要完全存储在此布局中。

什么是有效的(compute()经常被称为(结束优雅的解决方案? bool参数? enum参数?模板参数(如果是,如何实现(?


笔记:

  • compute()是一个相当长的函数,选择az只发生一次

我会使用枚举。 它的效率不比 bool 高或低,但在调用站点可能更清楚:

compute(s, UseAB);
compute(s, UseZB);

而不是:

compute(s, false);
compute(s, true);

模板选项是可能的,但可能不是更好;您应该先尝试常规运行时方式。 如果您非常关心性能,请考虑将compute()内联(如果它简短而简单(。

如果这是仅有的两种情况,我将只使用bool参数。保持简单。并正确记录它。

或者你可以有两种方法 computeA(S s)computeZ(S s) .在这种情况下,这实际上是关于你对什么感到满意。