【发布时间】:2016-10-13 18:52:18
【问题描述】:
C++ 标准规定如下:
在类模板或成员模板的成员的显式特化声明中 出现在命名空间范围内,成员模板和它的一些封闭类模板可能会保留 非特化,除了声明不应显式特化类成员模板,如果它 封闭类模板也没有明确专门化。 (自 C++11 起为 14.7.3/16,旧标准为 14.7.3/18)
这意味着以下是不可能的:
template<typename T>
class foo {
template<typename U>
void bar();
};
template<typename T>
template<>
void foo<T>::bar<some_type>(){
}
已经有多个与此相关的问题的人的问题,或多或少地通过“标准如此说”来回答。我不太明白为什么会存在这种限制。
【问题讨论】:
-
粗略猜测:如果存在
T=int和Uunspecialized 的特化,以及U=int、Tunspecialized 的特化,如果T=int应该取哪一个和U=int? -
哦,现在我觉得自己很蠢……
-
我应该回答这个问题还是你想回答?
-
想象一下你将如何在
foo的专业化中解决它,它根本没有方法bar...
标签: c++ templates standards language-lawyer explicit-specialization