问题不容易用标题中的几个词来描述。所以,我有一个管理用户实现的某些类型对象的经理。对象可以是 2 种类型,例如 - 正面和负面。所以我想让用户通过类声明来设置这个选项。明显方式:
class Base;
class BasePositive : Base;
class BaseNegative : Base;
class UserObject1 : public BasePositive;
class UserObject2 : public BaseNegative;
很好,效果很好。但是如果我们想使用继承:
class UserObjectBase : public BasePositive;
class UserObject3 : public UserObjectBase;
操作,所有来自 UserObjectBase 的派生类只能是正数。我想获得用户可靠的机制来声明自己的类并设置正面或负面的类型(例如)。所以,我已经搜索了一些机制来覆盖基类中的一些字段/属性(不管它是什么——只要实现它)。
真的,我没有看到没有宏的任何解决方案。但可能是其他人知道吗?
C++11 - 不能使用扩展(我想要,但不能)。
更新:
通过虚拟继承,我取得了一些成功:
#include <iostream>
struct base {
~base() {}
int value;
bool isPositive;
};
struct pos : virtual base {
pos() {
isPositive = true;
}
};
struct neg : virtual base {
neg() {
isPositive = false;
}
};
struct foobase : pos {};
struct fooNeg : virtual foobase, virtual neg {};
struct fooPos : foobase {};
int main(int argc, char const *argv[])
{
fooNeg f;
std::cout << f.isPositive << "\n";
fooPos p;
std::cout << p.isPositive << "\n";
return 0;
}
但正如我所知,虚拟继承是不好的做法。看别的东西...