【发布时间】:2011-02-02 00:32:39
【问题描述】:
template<int x> struct A {
template<int y> struct B {};.
template<int y, int unused> struct C {};
};
template<int x> template<>
struct A<x>::B<x> {}; // error: enclosing class templates are not explicitly specialized
template<int x> template<int unused>
struct A<x>::C<x, unused> {}; // ok
那么,如果外部类也没有特化,为什么不允许内部嵌套类(或函数)的显式特化呢?奇怪的是,如果我只部分通过简单地添加一个虚拟模板参数来专门化内部类,我就可以解决这个问题。让事情变得更丑陋和更复杂,但它确实有效。
我会将完全特化视为部分特化的子集 - 特别是因为您可以通过添加虚拟参数将每个完整特化表示为部分特化。所以这种部分专业化和完全专业化之间的歧义对我来说真的没有意义。
不幸的是,comp.std.c++ 中没有人敢回答,所以我再次将它放在这里。
注意:对于一组外部类的内部类的递归模板,我需要此功能,并且内部参数的特殊化确实取决于外部模板参数。
【问题讨论】:
-
至于为什么,我建议在这里问:groups.google.com/group/comp.std.c++
标签: c++ templates metaprogramming