专用于模板类的模板化成员
Specializing a templated member of a template class
可能的重复项:
模板化类中模板化成员函数的专用化
template <class T>
class MyClass
{
template <int N>
void func() {printf("unspecializedn");}
};
template<class T>
template<>
MyClass<T>::func<0>()
{
printf("specialziedn");
}
这行不通。是否可以专门化模板类的模板方法?
它不能按照要求完成。出于某种原因(我不确定基本原理),仅当封闭类也显式(即完全)专用时,才允许成员模板的显式(即完全)专用化。这一要求在语言标准中有明确规定(见C++98、C++03和C++11中的14.7.3/18)。
同时,允许成员类模板的部分专用化,在许多情况下,这可以用作解决方法(尽管很丑陋)。 但是,显然,它仅适用于成员类模板。当涉及到成员函数模板时,必须使用替代解决方案。
例如,一种可能的解决方法是将调用委托给模板类的静态成员,并改为专用化该类(通常建议这样做,因为它比函数模板专用化 http://www.gotw.ca/publications/mill17.htm 更好)
template <class T>
class MyClass
{
template <int N, typename DUMMY = void> struct Func {
static void func() { printf("unspecializedn"); }
};
template <typename DUMMY> struct Func<0, DUMMY> {
static void func() { printf("specializedn"); }
};
template <int N> void func() { Func<N>::func(); }
};
相关文章:
- 静态数据成员模板专用化的实例化点在哪里
- 成员变量如何使用专用类模板?
- GCC 7 中模板类的模板成员函数的专用化
- C++ 类模板部分专用化,而不专用化所有成员函数
- 专用于可变参数模板成员函数
- 对专用模板成员的未定义引用
- 对类模板成员的显式专用化的约束
- 类模板成员函数的专用化
- C++ 将派生类的成员函数指针作为参数传递时选择了错误的模板专用化
- 类成员函数的函数模板专用化
- '将成员函数仅添加到类的专用模板
- 静态数据成员的模板专用化
- 在实例化封闭类模板之后,我们可以声明模板类成员的部分专用化吗
- 如何部分专用化非成员和成员函数指针的结构模板
- 如何将类成员专用于多个模板值(常量)?
- 模板类中的模板成员专用化
- "expected initializer before '<' token"尝试模板成员专用化
- 模板化子类和模板化基类的静态成员专用化
- 数组的部分模板成员专用化
- 头中没有声明的模板类成员专用化