只接受指针类型参数的模板
A template that accepts only pointer type arguments
在看到模板可以部分专用于引用或指针类型后,我想知道是否可以编写一个仅接受指针类型的模板。这是我的尝试:
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>;
};
在看到模板可以部分专用于引用或指针类型后,我想知道是否可以编写一个仅接受指针类型的模板。这是我的尝试:
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>;
};