gpt4 book ai didi

c++ - 特化成员模板而不特化其父模板

转载 作者:可可西里 更新时间:2023-11-01 15:54:32 27 4
gpt4 key购买 nike

我有一个嵌套在另一个模板中的类模板。部分特化它很容易:我只是声明另一个 template< … > block 在其父级内。

但是,我需要另一个偏特化来恰好指定它的所有本地模板参数。这使它成为一个明确的特化。无论出于何种原因,显式特化都必须在 namespace 范围内。要在其父类之外声明它,必须指定父类,这需要一个非空的模板参数列表。这意味着部分特化。部分特化我正在做的,它应该在任意外部范围内工作。但是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 > {};

(我将所有非工作代码留在其中;适本地对其进行注释以尝试理解。)

最佳答案

在 C++ 标准 14.7.3/18 下是非法的:

....声明不应显式特化类成员模板,如果它的封闭类模板没有明确特化

关于c++ - 特化成员模板而不特化其父模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2009924/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com