私はクラスに持っている:異なるタイプの引数を取る関数を書くには?
template <class T>
class shared_vector
{
T data;
}
template <class T>
class device_vector
{
T data;
}
私は、任意の種類のオブジェクトをaccects関数fを書き、それがタイプshared_vector
またはdevice_vector
であることと、それに応じていくつかのフラグを設定します。
ここで明白な解決策は、関数のオーバーロードに行くことです。しかし、関数fが10個の引数をとるとします。これは、shared_vector
またはdevice_vector
のいずれかになります。 1024オーバーロード関数を記述する必要があります。
別の解決策は、両方からdevice_vector
とshared_vector
継承するhybrid_vector
親クラスを使用することです。
残念ながら、device_vectorコードは私の管理下にありません。
どのようにこの問題を解決する必要がありますか?
注:typeid(変数).name()は型を示すことができますが、関数の宣言はどのようになりますか、どのようにして型を推論できますか?
ビルダーのパターンがこのコンビナトリアル爆発を解決してくれるように思えるかもしれません。 –
これらのさまざまなタイプに共通するものは何ですか? –
または、実際には、スーパータイプのポインタの配列。問題の型を制御しないとすれば、独自のラッパー型を作成できます。 –