template instantiation check for member existing in class解释了如何检查模板中是否存在类成员。但是,如果交换机中有一组进程( NOT 模板),则可以使用一种方法来处理成员检查案例。它应该类似于这样的东西。请注意,实际的类定义不在我的控制之下,而是在我正在使用的头文件和库的未来版本中创建。
我知道这个预处理器示例不起作用,但由于这不是模板,如何设置此处理?
case myCase:
{
#ifdef myClass.memberA
myClass.memberA varName;
// other processing using varName
#else
//Alternate processing
#endif
break;
}
答案 0 :(得分:2)
您可以对所需的工作进行两次模板重载:
template<class T>
void process_myCase(T& obj, std::true_type);
template<class T>
void process_myCase(T& obj, std::false_type);
然后在case
中调用函数,其中第二个参数是通过您在问题开头提到的方法计算的。
第一个重载将被实例化为具有所需成员的类,而第二个重载将被实例化为所有其余的。
我不认为非模板化的方式会起作用,但是再次,因为这些模板可以放在你的cpp文件中我看不出它们是模板的缺点。