1

型をパラメーターとして渡したい (変数や参照ではない)。

私はこの作業コードを持っています:

"testState2" がクラスの名前 (つまり、この場合は型) である実行コード。基本型が state_t であることに注意してください。

changeState(new testState2());

状態変更機能:

void state_t::changeState(state_t * new_state)
{
    // Check if the state has changed
    if (this != new_state)
    {
        qDebug() << this->name << ": State changed to: " << new_state->name;
        delete this;
        _state = new_state;
    }
    else
    {
        qDebug() << this->name << ": State un-changed";
    }
}

このコードでは、基本的には testState2 の新しいインスタンスを作成していますが、呼び出しコードをさらに簡素化したいと考えています。次のように、型を渡したいだけです。

    changeState(testState2);

注: 「新規」はなく、これはインスタンスを作成するのではなく、単にクラスの名前を渡すだけなので、次のようになります。

  1. これは可能ですか?
  2. もしそうなら、どのように?
4

2 に答える 2

3

C++ のクラス (および一般的な型) はファーストクラスの値ではないため、受け渡しや保存はできません。

理論的には使用できるクラスの場合typeid、ほとんどの場合、インスタンス内の仮想関数によって返される文字列と、「仮想コンストラクター」パターンを実装するためのレジストリを使用する方が便利であることがわかりました。

struct Base
{
    virtual const char *class_name() = 0;
    ...
};

struct MyClass : public(Base)
{
    virtual const char *class_name() { return "MyClass"; }
    ...
}

std::map<std::string, Base *(*)()> instance_builders;
于 2013-10-30T15:00:14.990 に答える
0

State パターンを学習するには 、C++ での State Design Patternの例が良い出発点になるかもしれません。

于 2013-10-30T15:32:25.450 に答える