我想在派生类中使用静态变量,所以我想在基类中创建一些东西。基类是虚拟的。有可能吗?
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")
答案 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;
这不是那么多工作,而是让事情变得非常直接。