C++ class 成员检查是否为模板

C++ class member check if not a template

解释了如何检查模板中是否存在 class 成员。但是,给定一个开关中的一组进程(NOT 模板)是否有一种方法来处理成员检查案例。它应该类似于这样的东西。请注意,实际的 class 定义不在我的控制之下,而是在我使用的头文件和库的未来版本中创建的。

我知道这个预处理器示例不起作用,但由于这不是模板,如何设置此处理?

    case myCase:
    {
#ifdef myClass.memberA
      myClass.memberA varName;
      // other processing using varName
#else
      //Alternate processing
#endif
      break;
    }

你可以有两个你想要的工作的模板重载:

template<class T>
void process_myCase(T& obj, std::true_type);

template<class T>
void process_myCase(T& obj, std::false_type);

然后在你的 case 中使用你在问题开头提到的方法计算的第二个参数调用函数。

第一个重载将为 类 的所需成员实例化,而第二个重载将为所有其余成员实例化。

我认为非模板方式行不通,但是由于这些模板可以放在您的 cpp 文件中,所以我看不出它们作为模板有什么缺点。