c++ - 在 C++ ctor-initializer 中可选地包含成员的干净方法

标签 c++ ctor-initializer

如果我有:

Class MyClass {
public:
    MyClass( /* args */ );
private:
    someType member0;
    someType member1;
    // ...
    someType memberN;
#if defined(FIRST_COMPILE_CONDITION)
    someType condition1Member0;
    someType condition1Member1;
    // ...
    someType condition1MemberN;
#endif
#if defined(SECOND_COMPILE_CONDITION)
    someType condition2Member0;
    someType condition2Member1;
    // ...
    someType condition2MemberN;
#endif
};

对于一些任意数量的编译条件,是否有一种干净的方法来做这等价的事情(特别是对于可能的多个编译条件),而不需要将一些永久成员放在最后?

MyClass::MyClass( /* args */ ) :
    member0( someValue ),
    member1( someValue ),
    // ...
    memberN( someValue ),
#if defined(FIRST_COMPILE_CONDITION)
    condition1Member0( someValue ),
    condition1Member1( someValue ),
    // ...
    condition1MemberN( someValue ),
#endif
#if defined(SECOND_COMPILE_CONDITION)
    condition2Member0( someValue ),
    condition2Member1( someValue ),
    // ...
    condition2MemberN( someValue ),
#endif
// ...
{
}

由于尾​​随逗号,上述内容在大多数情况下都无法编译。

编辑澄清:

可能应该明确指出,someValue 旨在成为一个潜在独立的任意值,在每种情况下,它可能取决于也可能不取决于构造函数参数。

最佳答案

你可以在初始化器前加上逗号:

MyClass::MyClass() :
     member0( someValue )
    ,member1( someValue )
    // ...
    , memberN( someValue )
#if defined(FIRST_COMPILE_CONDITION)
    ,condition1Member0( someValue )
    ,condition1Member1( someValue )
    // ...
    ,condition1MemberN( someValue )
#endif
// ...
{
}

关于c++ - 在 C++ ctor-initializer 中可选地包含成员的干净方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12395305/

相关文章:

c++ - 构造函数中冒号后的变量

c# - 如何将 COleDateTime 对象列表作为 SAFEARRAY* 传递

c++ - 在 solaris 上使用 bjam 构建 boost 库时如何指定 64 位机器体系结构?

c++ - 请解释我的结构定义中的冒号?

c++ - const 字段的复杂初始化

c++ - 如何初始化类字段?

c++ - SSE2 内在函数 - 比较无符号整数

c++ - 为什么 C++ "const"函数可以修改其指针类型成员?

c++ - 打开优化(O1 或 O2 或 O3)时程序卡在 pthread_spin_unlock 语句

c++ - 使用虚拟继承时初始化基类