据我了解,模板特化的工作原理如下
template<typename T>
void dummy(T a) { std::cout<<a<<std::endl; }
template<>
void dummy<int>(int a) { std::cout<<"special"<<std::endl; }
我正在查看以下代码,它检查某物是否是指针:
template<typename T>
struct is_ptr {
constexpr static bool value = false;
};
template <typename T>
struct is_ptr<T*> {
constexpr static bool value = true;
};
这仍然是模板特化吗?为什么这条线是 template <typename T>
又在专业领域,而不是 <>
。是因为只要我们有T*
,编译器就会生成多个特化吗?而不是T
?
这段代码会扩展为
template<>
struct is_ptr<int*>
{
constexpr static bool value = true;
};
?
最佳答案
您的第一个示例是 function template specialization
。 is_ptr
例如 partial class template specialization
。
函数模板不能部分指定,类模板可以。
template <typename T>
的原因在类模板中部分特化正是因为它在指针上部分特化,但可以是任何类型 T
.
在您的示例中使用 is_ptr<int*>::value
时,确实会选择偏特化。
关于c++ - 模板特化示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58675643/