Вы не можете сделать это, ParameterType должен знать все время, когда вы используете CMsgConsistencyTest и когда его члены имеют доступ к m_ConsistencyErrors
Для этого CMsgConsistencyTest может быть классом шаблона, например
#include <set>
enum EnMsg123Param
{
Msg123_1,
Msg123_2,
};
enum EnMsg5Param
{
Msg5_1,
Msg5_2,
Msg5_3,
};
template<typename ParameterType>
class CMsgConsistencyTest // : public CTestBase // left out for simplicity
{
public:
// ...
private:
std::set<ParameterType> m_ConsistencyErrors;
};
// and for instance
CMsgConsistencyTest<EnMsg123Param> A;
CMsgConsistencyTest<EnMsg5Param> B;
, в противном случае вам может потребоваться сделать что-то уродливое и катастрофическое и «не C ++», например:
CMsgConsistencyTest(const EnTests TestType) // : CTestBase(TestType) // left out for simplicity
{
if (TestType == MSG123_CONSISTENCY_TEST)
{
m_ConsistencyErrors = new set<EnMsg123Param>;
}
else if (TestType == MSG5_CONSISTENCY_TEST)
{
m_ConsistencyErrors = new set<EnMsg5Param>;
}
// else ?
// probably need to save TestType etc
}
private:
void * m_ConsistencyErrors;