c++ - 如何使用模板模板参数专门化模板类的成员

标签 c++ templates template-specialization

我有一个带有 int 和模板模板参数的模板类。 现在我想特化一个成员函数:

template <int I> class Default{};
template <int N = 0, template<int> class T = Default> struct Class
{
    void member();
};

// member definition
template <int N, template<int> class T> inline void Class<N, T>::member() {}

// partial specialisation, yields compiler error
template <template<int> class T> inline void Class<1, T>::member() {}

谁能告诉我这是否可行以及我在最后一行做错了什么?

编辑:我要感谢大家的投入。由于我还需要对某些 ​​T 进行特化,因此我选择了反对 Nawaz 建议的解决方法并特化了整个类,因为它无论如何只有一个成员函数和一个数据成员。

最佳答案

您不能部分特化单个成员函数,您必须对整个类进行部分特化。

template <int I> class Default{};
template <int N = 0, template<int> class T = Default> struct Class
{
    void member();
};

// member definition
template <int N, template<int> class T> inline void Class<N, T>::member() {}

// partial specialization
template <template<int> class T> struct Class<1, T>
{
  void member() {}
};

关于c++ - 如何使用模板模板参数专门化模板类的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7558907/

相关文章:

c++ - OOP - 这是不好的做法吗?

C++ 模板挑战

c++ - 在 clang++ 上使用带有 enable_shared_from_this 的 shared_ptr 时编译错误

c++ - 将可变参数模板模板参数专用于最小参数数量 : legal or not?

c++ - 专门化可变参数模板成员函数

c++ - 如何将更新的 git-hash 嵌入到 Version.hpp 中?

c++ - C++代码中的 “Undefined reference to operator<<”错误

c++ - c++模板规范和重载的解析

c++ - 在带有可变参数模板的基于模板的类中进行完善转发?

c++ - 这本教科书错了吗?专门化某些成员函数而不是其他成员函数