C ++类成员检查是否不是模板

时间:2015-02-22 12:49:29

标签: c++ member

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;
    }

1 个答案:

答案 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文件中我看不出它们是模板的缺点。