静态变量继承C ++

时间:2018-03-10 20:30:13

标签: c++ inheritance

我想在派生类中使用静态变量,所以我想在基类中创建一些东西。基类是虚拟的。有可能吗?

2018-03-11  0:07:24 140735825187776 [ERROR] mysqld: 
Can't create/write to file '/var/folders/6h/0k9bd25j1kl4v_381tm0vykh0000gn/T/ibfDLofU' (Errcode: 13 "Permission denied")

2 个答案:

答案 0 :(得分:0)

唉,不,C ++没有虚拟静态。你可以做的是使用非静态getter方法:

 class A {
      virtual const int& Foo() const = 0;
 }

 class B : A {
      static int foo_;
      const int& Foo() const override { return foo_; }
 }
 int B::foo_ { 1 };

你可以"自动化"使用mix-in定义CRTP类:

 class A {
      virtual const int& Foo() const = 0;
 }

 template <typename T>
 class FooHolder {
      static int foo_;
      const int& Foo() const override { return foo_; }
 }

 class B : A, virtual FooHolder<B> {
      // other stuff
 }

这样,您在子类中唯一需要做的就是指示混合继承。我可能会遗漏一些虚拟遗传警告(因为我很少使用它)。

描述here的另一个选项是让类A自己模板化,这样每个B都从不同的A继承。但这会破坏你的继承结构。

答案 1 :(得分:0)

最简单的解决方案是在每个派生类中声明x

class Derived1 : virtual Base {
  static const int x;
  public:
    void g() {}
};
const int Derived1::x = 1;

这不是那么多工作,而是让事情变得非常直接。