在看到模板可以部分专用于引用或指针类型后,我想知道是否可以编写一个只接受指针类型的模板。这是我的尝试:
template <typename T*>
struct MyTemplate{};
int main() {
MyTemplate<int *> c;
(void)c;
return 0;
}
这不会编译。应该如何修改? (即,如果我想要完成的事情是完全可能的)
最佳答案
您可以使用部分特化:
template <typename T> struct MyTemplate; // Declaration
template <typename T> struct MyTemplate<T*> // Specialization
{
};
或使用static_assert
template <typename T> struct MyTemplate
{
static_assert(std::is_pointer<T>::value, "Expected a pointer");
// T = value_type*
using value_type = std::remove_pointer_t<T>;
};
关于c++ - 只接受指针类型参数的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31769629/