【发布时间】:2009-01-04 13:59:27
【问题描述】:
我想要一个在指向成员函数的情况下的专门模板。有没有办法检测到这一点?现在我声明 struct isPtrToMemberFunc,然后为每个类(现在只有 1 个)添加一个额外的模板(类 TType=void)并专门化额外的模板以查看它是否为 isPtrToMemberFunc。有没有办法自动检测到这个?如果不是,我目前的方法是最好的解决方案吗?
【问题讨论】:
标签: c++ templates specialization
我想要一个在指向成员函数的情况下的专门模板。有没有办法检测到这一点?现在我声明 struct isPtrToMemberFunc,然后为每个类(现在只有 1 个)添加一个额外的模板(类 TType=void)并专门化额外的模板以查看它是否为 isPtrToMemberFunc。有没有办法自动检测到这个?如果不是,我目前的方法是最好的解决方案吗?
【问题讨论】:
标签: c++ templates specialization
有一种方法,但它包括您对每个数量的参数和这些成员函数的 const/volatile 修饰符重复您的专业化。一个更简单的方法是使用boost.functiontypes,它会为你做到这一点:
template<typename T>
void doit(T t) {
if(boost::function_types::is_member_function_pointer<T>::value) {
std::cout << "it is";
// ...
} else {
std::cout << "it is not";
// ...
}
}
从here获取它。
【讨论】: