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 文件中,所以我看不出它们作为模板有什么缺点。
我知道这个预处理器示例不起作用,但由于这不是模板,如何设置此处理?
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 文件中,所以我看不出它们作为模板有什么缺点。