2

私はこれを持っています:

struct myClass{
    multiset<string,binPred<string> > values ;

    myClass(const char param1, const char param2) : values(less<string>())
    { }
} ;

valuesとの値に応じて、異なるファンクターでメンバーを初期化する必要がparam1ありparam2ます。残念ながら、どのファンクターを使用するかを決定するロジックはそれほど単純ではなく、一度values作成すると、関連する比較ファンクターを変更することはできません。

?:だから...メンバーの初期化部分にすべての決定ロジックを配置する必要がありますが、演算子を使用する方法がわかりません。
そこにもっと複雑なステートメントを入れることは可能ですか?? (switch文のように)

そうでない場合、コンストラクターの本体で初期化できるように、の構築を遅らせる方法はありvaluesますか??

ありがとう。

4

3 に答える 3

9

関数を呼び出します。

myClass(const char param1, const char param2) 
             : values( MakeComplicatedDecision( xxx ) ) {
}

ロジックを関数に入れます。

于 2009-04-13T13:39:41.510 に答える
4

持っているパラメーターを受け入れ、必要な値を返す静的メンバー関数を使用できます。これにより、問題が完全に解決され、クリーンで簡単にデバッグ可能なコードが可能になります。

于 2009-04-13T13:40:50.757 に答える
0

値のマルチセットへのポインターを使用newしてから、コンストラクターでそれを作成するために使用できます。これは構築を遅らせますが、少量のオーバーヘッドを意味します。

于 2009-04-13T13:38:04.167 に答える