gpt4 book ai didi

c++ - 在模板层次结构中继承类型声明

转载 作者:行者123 更新时间:2023-11-28 05:40:33 24 4
gpt4 key购买 nike

考虑一下:

template <typename T>
struct A {
using MyType1 = ...;
using MyType2 = ...;
using MyType3 = ...;
using MyType4 = ...;
using MyType5 = ...;
...
};

template <typename T>
struct B: A<T> {
using MyType1 = typename A<T>::MyType1;
using MyType2 = typename A<T>::MyType2;
using MyType3 = typename A<T>::MyType3;
using MyType4 = typename A<T>::MyType4;
using MyType5 = typename A<T>::MyType5;
...
};

template <typename T>
struct C: A<T> {
using MyType1 = typename A<T>::MyType1;
using MyType2 = typename A<T>::MyType2;
using MyType3 = typename A<T>::MyType3;
using MyType4 = typename A<T>::MyType4;
using MyType5 = typename A<T>::MyType5;
...
};

... // Many more classes in the hierarchy
// with all the type declarations duplicated in each of them.

有什么方法可以缩短它吗?

一个相关question被问到,但没有说明重复有多糟糕,也没有收到任何回复。

最佳答案

如果您不想在派生类中导入或重新声明类型名,您至少需要告诉编译器在派生类层次结构中查找类型名。

您可以使用派生类的名称作为限定范围来执行此操作:

typename B::MyType1 x;

如果 B 是一个长名字,或者你希望能够在 BC 之间自由移动代码,你可以按照惯例添加类开头的 typedef:

template <typename T>
struct B: A<T> {
using ThisType = B;
// ...
typename ThisType::MyType1 x;
};

关于c++ - 在模板层次结构中继承类型声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37206745/

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