只接受指针类型参数的模板

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>;
};