質問は、タイトルのいくつかの単語で説明するのは簡単ではありません。だから、私はユーザーによって実装されたいくつかのタイプのオブジェクトを管理したマネージャーがいます。オブジェクトには、たとえば、正と負の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;
Ops、UserObjectBaseから派生したすべてのクラスはPositiveのみになります。独自のクラスを宣言し、正または負のタイプを設定するためのユーザーの信頼できるメカニズムを取得したい(たとえば)。だから、私は基本クラスのいくつかのフィールド/プロパティをオーバーライドするためのいくつかのメカニズムを検索しました(それが何であるかに関係なく-それを達成するだけです)。
本当に、私はマクロなしで解決策を見ませんでした。しかし、他の誰かが知られている可能性がありますか?
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;
}
しかし、私が知っているように、仮想継承は悪い習慣です。他の何かを探しています...