gpt4 book ai didi

c++ - 具有模板类的模板特化

转载 作者:行者123 更新时间:2023-11-30 02:57:49 26 4
gpt4 key购买 nike

我执行以下操作。

template <class C> class B{};

template <class X>
struct A{
int member;
};

template <class Y>
struct A<B<Y>>{
A(int n):member(n){}
};

int main(int, char**){}

即X 类可能是模板本身,对于这种情况,我想对 A 类模板进行专门化。
但是编译器说:

d:\>g++ -std=gnu++11 -o spec.exe spec.cpp
spec.cpp: In constructor 'A<B<Y> >::A(int)':
spec.cpp:11:14: error: class 'A<B<Y> >' does not have any field named 'member'

如果类A<B<Y>>A 完全分开那么一切都是正确的,可能没有任何成员 A .但我想要 A 的特化.及其所有内容。
或者,可能是 A 的一些专门构造函数对于 X 的情况是B<Y> .
如何实现?

最佳答案

模板特化是一种与继承完全不同的机制。它不扩展通用模板的内容:它用特殊情况的新内容替换它们。所以编译器是对的:你的类 A<B<Y>>没有任何名为 member 的字段.它只有一个采用 int 的构造函数以及一些额外的自动生成的函数(复制构造函数、析构函数等)。

如果你想“继承”模板的内容,你有两个选择:

  • 将模板中的所有内容复制到特化
  • 将共同的内容放在一个基类中并从中继承

根据您想做什么,其中一个选项会比另一个更好。

关于c++ - 具有模板类的模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14156044/

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