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

标签 c++ templates c++11 partial-specialization

在看到模板可以部分专用于引用或指针类型后,我想知道是否可以编写一个只接受指针类型的模板。这是我的尝试:

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/

相关文章:

c++ - 调用成员函数,在类外部声明

c++ - SetIntersection 大小不分配

c++ - 为什么编译器提示 f() 不可见?

c++11 - Rust 中的 C+11 类类型衰减

c++ - 每层存储超过 1 亿个切片的切片数据

带有桌面应用程序的 C++ 微服务

c++ - 将 `auto` 关键字与 STL 迭代器一起使用

c++ - 我可以在 c++0x 模板中使用 loki ObjectLevelLockable

c++ - 在不知道类成员的情况下从基类实例创建派生类实例

C++ 函数 switch 语句或数组对宏值的抽象