一个仅接受指针类型参数的模板。

12

在看到可以为引用或指针类型部分特化模板后,我想知道是否可以编写一个仅接受指针类型的模板。以下是我的尝试:

template <typename T*>
struct MyTemplate{};

int main() {
    MyTemplate<int *> c;
    (void)c;
    return 0;
}

这段代码无法编译。如果我的目的是可行的,应该如何修改它?

1
请查看std::is_pointer - πάντα ῥεῖ
1个回答

19

您可以使用部分特化:

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++20中,你可以使用约束(constraint):
template <typename T>
requires (std::is_pointer_v<T>)
struct MyTemplate
{
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接