次のようなクラスがあるとします
template<class T>
struct A {
void foo() {
// Need access to "T" here
typedef typename someTrait<T>::someType T2;
}
};
foo()
クラスのインスタンス (またはそのポインター) をコンテナー (おそらく STL) に「登録」(または格納) して、登録されているすべてのインスタンスのメソッドを後で呼び出すことができます。
異なるテンプレート パラメータでインスタンス化されたインスタンスが格納されるため ( A<int>
、A<float>
、...)、明らかに、 を使用しstd::vector
てインスタンスまたはそのポインタを格納することはできません。私が想像できるのは、メソッドを作成し、次のようstatic
に関数ポインターを格納することです。void foo()
void static foo();
typedef void (* fooPtr)(void);
std::vector<fooPtr>
しかし、どういうわけか、これはあまり C++11 らしくないと感じています。ラッパークラスなどを導入する良い解決策はありますか?
基本クラスを導入し、動的キャストを使用すると、依存関係が導入されRTTI
ますよね? への依存を避けたいRTTI
。
C++11 でこれを行うにはどうすればよいでしょうか? (Boost へのリンクや への依存など、追加の依存関係を導入したくありませんRTTI
。)
ご意見ありがとうございます!