名前の "* Pack"に相当するクラスがたくさんあるとします。例えば、私がクラスMooを持っているなら、私はMooPackを持っています、もし私がFooを持っていれば、私もFooPackを持っています。テンプレート引数の文字列化と非文字化け
私は
template <class X, class XPack>
XPack packify(X input){
...
}
フー
からFooPackを返すC++テンプレート関数がテンプレート引数を指定せずにこれを実行することが可能ですしたいですか?現時点では、これは以下のように実行する必要があります。Moo moo;
MooPack mooppey = packify<Moo, MooPack>(moo);
それが唯一の醜いテンプレートの指定ビットが実際にされていない、離れての#defineを使用してから離れて行くが、できることが、武のテンプレート引数が必要な場合どちらも最高の解決策ではありません。
方法はありますか、またはC++ 0xを待たなければなりませんか?
ああ、実際には1つの引数しか指定できないと思うのですが(2つの引数はちょっと醜いです)。そのネストされたクラスのことは素晴らしいアイデアですが、私は既存のクラス宣言を変更することはできません。 – kamziro
'* Pack'クラスをネストする必要さえないので、入れ子になったtypedefを提供するだけです。使用方法は上記の例と同じです。これはかなり一般的なパターンです(「メタ機能」と呼ばれます)。 –