相关疑难解决方法(0)

检测公共基类

假设一个人有一个类层次结构,没有多重继承:

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++ inheritance introspection base-class c++11

7
推荐指数
1
解决办法
644
查看次数

在派生类中调用基类方法而不指定基类名称

当覆盖 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 类。提前谢谢. 安德烈亚

c++ methods virtual class abstract

7
推荐指数
1
解决办法
631
查看次数

TR2 会以 C++17 版本发布吗?

TR2中有很多甜蜜的东西。那会在C++17中吗?

据我了解,TR1于2005年完成,必须等到C++11才能标准化。但我也明白TR2已经完成了?

我到 C++17 的链接没有提到任何有关 TR2 的内容,但我希望......

c++ tr1 c++11 c++-tr2 c++17

6
推荐指数
1
解决办法
2077
查看次数

在编译时查找基类

标题几乎说明了一切:在C ++中,有没有一种方法可以在编译时获取类的基本类型?即 是否可以将一个类传递给模板,并让该模板使用将给定类的基础传递给它的其他模板?

我的问题不是我自己是否可以实现这种功能,没有问题(使用特质等)。我的问题是,是否有一些(模糊的)内置功能可用于此目的。

c++ templates static-polymorphism

5
推荐指数
1
解决办法
1144
查看次数

在编译时获取给定类的基类的特征

在 cpp 中,我可以轻松检查类是否AB这样的子类:

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)

c++ c++11

5
推荐指数
0
解决办法
97
查看次数