テンプレート クラスのインスタンスを作成して格納する「オブジェクト マネージャ」を作成しようとしています。このクラスは 1 つのテンプレート引数を取り、基本クラスから継承して、異なるテンプレート引数を持つインスタンスを同じコンテナーに格納できるようにします。テンプレート引数として使用される型は、可変個引数テンプレート関数でユーザーによって提供されます。
以下は、この問題を説明する最小限の例です。
struct A
{
int m_a = 0;
};
template<typename T>
struct B : public A
{
int m_b = 1;
T m_t;
};
template<typename... Types> std::vector<A*> generate_a_vec()
{
std::vector<A*> a_vec; // <--- Need to initialize with a new B<T> for each T in "Types"
return a_vec;
}
int main()
{
std::vector<A*> a_vec = generate_a_vec<int, float, bool>();
for(A* a : a_vec)
{
std::cout << a->m_a << std::endl;
}
return 0;
}
T
使用するすべてにデフォルトのコンストラクターがあると仮定しましょう。フォールド式を使用して for each type in を作成し、結果のポインターを vector in に追加する方法はB<T>
ありnew
ますTypes
かgenerate_a_vec()
?