Pot*_*ter 10 c++ templates partial-specialization
我有一个嵌套在另一个模板中的类模板.部分特殊化很简单:我只是template< … >在其父级中声明另一个块.
但是,我需要另一个部分特化,恰好指定其所有本地模板参数.这使它成为一个明确的专业化.无论出于何种原因,显式特化都必须在命名空间范围内.要在父类之外声明它,必须提名父级,这需要非空的模板参数列表.这意味着部分专业化.部分专业化是我正在做的事情,它应该在任意外部范围内工作.但GCC和Comeau都无法使用部分特化形式参数识别父提名中的模板参数.
template< class X > struct A {
template< class Y > struct B; // initial declaration OK
template< class Z >
struct B< A< Z > > {}; // partial OK as long as there's a local arg
template<> // ERROR: this syntax triggers explicit specialization
struct B< int > {};
};
template<> // ERROR: can't nest template<>s here (why?)
template< class X > // ERROR: can't deduce X from type of A<X>::B<int> (why?)
struct A< X >::B< int > {};
Run Code Online (Sandbox Code Playgroud)
(我把所有非工作代码都留下了;适当地评论以试图理解.)