質問

(一部)として定義されたテンプレートクラスがあります

template <class T> MyClass
{
public:
   void DoSomething(){}
};

別のクラスからDoSomethingを呼び出したいが、同じ場所で複数の 'T'型に対してこれを実行できるようにしたい場合、メソッド関数のポインターはクラス型に一意に制約されるため、私はアイデアに固執しています。もちろん、各MyClassは異なる型であるため、「多態的な」方法でMyClassDoSomething()への関数ポインターを格納することはできません。

ユースケースでは、保持クラスに「DoSomething」への関数ポインターのベクトルを格納し、1つの場所からすべての格納されたクラスへの呼び出しを発行できるようにします。

何か提案はありますか?

役に立ちましたか?

解決

わかりました。したがって、ファンクタソリューションは必要に応じて機能しません。おそらく、テンプレートクラスを共通のベース「インターフェイス」から継承させる必要があります。クラス。そして、それらのベクトルを使用します。

次のようなもの:

class Base { 
public:
  virtual ~Base(){}
  virtual void DoSomething() = 0;
}

template <class T> class MyClass : public Base {
public:
    void DoSomething(){}
};

std::vector<Base *> objects;
objects.push_back(new MyClass<int>);
objects.push_back(new MyClass<char>);

他のヒント

ご存知のとおり、それがまさに私がやるべきことでした。奇妙なことに、私はそれが今私を逃れる理由のために、私のユースケースに有効なソリューションとしてそれを割引きました。コンパイル時のディスパッチのために同じ場所でメタプログラミングを行っていることに目がくらんでいたと思います(つまり、追加された頭脳でのコンパイル時間とランタイムの混乱)。

衝撃をありがとう!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top