如果我有:
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/