假设一个人有一个类层次结构,没有多重继承:
struct TOP{};
struct L : TOP{};
struct R : TOP{};
struct LL : L{};
struct LR : L{};
struct RL : R{};
struct RR : R{};
Run Code Online (Sandbox Code Playgroud)
是否有可能编写一个返回两种类型的公共基类型的元函数?(void如果不存在公共基类,则可以返回.)
例如
common_base<RR, R>::type == R
common_base<RL, RR>::type == R
common_base<LL, RR>::type == TOP
common_base<LL, std::string>::type == void
Run Code Online (Sandbox Code Playgroud)
显然这不适用于多个inhertance,但我专注于单继承案例.
首先,如果没有对基类进行一些反省,似乎是不可能的.所以,我有这个更容易的问题,以每个clase知道它的基础(通过内部base类型)的方式来做,例如:
struct LR : L{using base = L;};
Run Code Online (Sandbox Code Playgroud)
即便以这种方式,我似乎无法正确地进行元编程.
我也读到了某处(我现在找不到),GCC有一些扩展来检测公共基类.是这样的吗?
当覆盖 C++ 虚拟方法时,是否有一种方法可以在不指定确切基类名称的情况下调用基类方法,就像我们在 C# 中使用“base”关键字可以做到的那样?我知道这可能与多重继承发生冲突,但我想知道是否有更现代的 C++ 版本引入了这种可能性。我想做的是这样的:
class A
{
public:
virtual void paint() {
// draw something common to all subclasses
}
};
class B : public A
{
public:
virtual void paint() override {
BASE::paint();
// draw something specific to class B
}
};
Run Code Online (Sandbox Code Playgroud)
我知道在 B::paint() 中我们可以调用 A::paint(),我只想知道是否有更“通用”的方法来调用基本方法而不显式引用 A 类。提前谢谢. 安德烈亚
据我了解,TR1于2005年完成,必须等到C++11才能标准化。但我也明白TR2已经完成了?
我到 C++17 的链接没有提到任何有关 TR2 的内容,但我希望......
标题几乎说明了一切:在C ++中,有没有一种方法可以在编译时获取类的基本类型?即 是否可以将一个类传递给模板,并让该模板使用将给定类的基础传递给它的其他模板?
我的问题不是我自己是否可以实现这种功能,没有问题(使用特质等)。我的问题是,是否有一些(模糊的)内置功能可用于此目的。
在 cpp 中,我可以轻松检查类是否A是B这样的子类:
class B{};
class A : public B {};
is_base_of_v<B, A>
Run Code Online (Sandbox Code Playgroud)
但有没有办法做这样的事情呢?
class B{};
class C{};
class A : public B, public C {};
using bases = base_classes<A>; //giving tuple<B, C> or something like that
Run Code Online (Sandbox Code Playgroud)