模板函数没有对象参数专门化

时间:2016-06-22 20:24:48

标签: c++ templates template-specialization

我想专门化一个模板函数来获取非指针类型,如果它得到一个指针,我想在没有*的情况下调用它。

我想知道是否有一种不使用std :: remove_pointer的方式。

例如,我喜欢这样做:

template<typename T>
void setName() {
    name = __PRETTY_FUNCTION__;
}

template<typename T>
void setName<T*>() {
    setName<T>();
}

name被定义为私有数据成员。

1 个答案:

答案 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(); 
}