呼び出されるctorに応じて、メンバの異なるテンプレートクラスが必要です。 私は基本クラスを持つsfinaeを使って別のメンバーを持つクラスを取得できました(私はこれをほぼSFINAE on member variableのようにしました)。 今、私の質問は、クラスのどのctorが呼び出されているかによって、メンバーが異なる単一のテンプレートクラスを達成できますか? 誰かがこれを達成する方法を知っているかもしれません。コンストラクタに応じてメンバの数を変更します。
編集:私は現在、boost::variant
を使用していますが、問題は、バリアントの中で最大のオブジェクトが巨大で、最小のものがポインタであることです。これは実際のパフォーマンス上の問題です。なぜなら、ほとんどの場合、ポインタはバリアント内にあるからです。
EDIT II:これはctorでうまくいくとすれば素晴らしいかもしれませんが、そうでなければ工場での作業もうまくいくでしょう。
EDIT III(または私が達成しようとしていること): 現在、C++に変換するDSLを作成しています。 多型を可能にしようとしているので、私は関数へのポインタだけを渡しています。いくつかのポインタは参照カウントされ、いくつかのポインタは生のものであり、ユーザが望むものに応じて、shared_pointersと同じクラスの生ポインタがあります。その理由は私は2つの異なるクラスを作ることができない理由は、関数がポインタ上で呼び出される場合、それは同じ関数でなければならない、そうでなければ、私に与えるだろうすべてのfnctionsをオーバーロードする必要があります 2 ** n関数n個の引数を持つ。 これは、クラスを作成しようとしている理由です。これは、ctorに渡される内容に基づいて、生のポインタまたはshared_ptrを表すことができます。
コンストラクタである必要がありますか?代わりに工場機能にすることはできますか? – ildjarn
これは奇妙なアイデアのように見えます...あなたは正確に何をしようとしていますか? – Holt
@ildjarn:まさに私の考え方:-)必要に応じてオブジェクトを配信するジェネレータ/ファクトリを作成します。 – Klaus