公开最直接的基类模板名称
Expose the most direct base class template name
本文关键字:基类 更新时间:2023-10-16
考虑以下代码:
template <class...> struct base {};
template <class... T> struct intermediate: base<void, T...> {};
template <class... T> struct derived: base<T...>, intermediate<T...> {};
using type1 = derived<int>::intermediate::base; // works
using type2 = derived<int>::base; // ambiguous
是否有一种方法可以使其在没有歧义的情况下工作,从而使derived<int>::base
表示层次结构中最"直接"的基类(在本例中为base<int>
(。欢迎使用模板元编程。
如果合适,您可以在derived
中添加别名,这样您就可以从外部使用它们:
template <class... Ts> struct derived: base<Ts...>, intermediate<Ts...>
{
using DirectBase = base<Ts...>;
using IndirectBase = typename intermediate<Ts...>::base;
};
然后
using type1 = derived<int>::IndirectBase ;
using type2 = derived<int>::DirectBase ;
我看不出消除歧义的方法。
有人提出std::bases
std::direct_bases
可能会有所帮助,但遭到拒绝。
相关文章:
- std::具有相同基类的类的变体
- 是否可以初始化不可复制类型的成员变量(或基类)
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 基类中的函数名称解析
- C++初始化基类
- 如何通过派生类函数更改基类中的向量
- 如何定义一个纯抽象基类
- 如何使用基类指针引用派生类成员
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 如何引用基类的派生类?
- 如果基类包含双指针成员,则派生类的构造函数
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 为什么此派生对象无法访问基类的后递减方法?
- 公开最直接的基类模板名称
- 当基类是依赖类型时,这是一个缺陷吗
- 如何使基类的运算符对基类的可变参数数可见(请参阅下面的代码)?
- 模板基类中的静态变量
- C++ 继承:将子类传递给需要基类的函数并获取子类行为
- 继承和友元函数,从基类访问受保护的成员