If I have:
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
};
for some arbitrary number of compile conditions, is there a clean way to do the equivalent of this (especially for possibly multiple compile conditions), without putting some permanent member last?
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
// ...
{
}
As the above will not compile under most conditions due to the trailing comma.
Edit to clarify:
It probably should be noted explicitly that someValue
is intended to be a potentially independent, arbitrary value that may or may not depend on constructor arguments in each case used.
You can put the comma before initializers:
MyClass::MyClass() :
member0( someValue )
,member1( someValue )
// ...
, memberN( someValue )
#if defined(FIRST_COMPILE_CONDITION)
,condition1Member0( someValue )
,condition1Member1( someValue )
// ...
,condition1MemberN( someValue )
#endif
// ...
{
}