gpt4 book ai didi

c++ - 为什么允许嵌套类模板的部分特化,而不允许完全特化?

转载 作者:IT老高 更新时间:2023-10-28 14:01:20 25 4
gpt4 key购买 nike

    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++ 中没有人敢回答,所以我再次将它放在这里。

注意:对于一组外部类的内部类的递归模板,我需要此功能,并且内部参数的特殊化确实取决于外部模板参数。

最佳答案

我对为什么会发生这种情况的猜测:完整的特化不再是“模板类/函数”,它们是“真实的”类/方法,并且可以拥有真实的(链接器可见的)符号。但是对于一个部分特化的模板中的一个完全特化的模板,这是不正确的。可能做出这个决定只是为了简化编译器编写者的生活(并且在此过程中让编码人员的生活更加艰难:P)。

关于c++ - 为什么允许嵌套类模板的部分特化,而不允许完全特化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2537716/

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