我想专门化一个模板函数来获取非指针类型,如果它得到一个指针,我想在没有*的情况下调用它。
我想知道是否有一种不使用std :: remove_pointer的方式。
例如,我喜欢这样做:
template<typename T>
void setName() {
name = __PRETTY_FUNCTION__;
}
template<typename T>
void setName<T*>() {
setName<T>();
}
name
被定义为私有数据成员。
答案 0 :(得分:3)
您的想法是正确的,但C ++中不允许部分函数模板特化。很可能允许部分类模板专门化,因此您可以使用静态方法解决方法(请参阅下面的setName_impl
专业化)以及需要的函数模板包装器(请参阅下面的setName()
):
template<typename T>
struct setName_impl{
static void exec() { }
};
template<typename T>
struct setName_impl<T*>{
static void exec() {
setName<T>::exec();
}
};
template<typename T>
void setName() {
setName_impl<T>::exec();
}