次の方法で、実行時にテンプレート パラメーターを使用してクラスをインスタンス化することは可能ですか?:
#include <iostream>
#include <vector>
using namespace std;
template<typename T>
struct Foo {
vector<T> d;
};
template<typename T>
struct Solver {
Foo<T> data;
virtual void calc() = 0;
};
struct SolverA : Solver<int>
{
void calc()
{
cout << "PRINT A\n";
}
};
struct SolverB : Solver<double>
{
void calc()
{
cout << "PRINT B\n";
}
};
int main()
{
... solver;
if (...) {
solver = new SolverA;
} else {
solver = new SolverB;
}
solver->calc();
}
したがって、クラスSolverA
とSolverB
にはテンプレート パラメーターはありませんが、コンパイル時にどれを使用するかを決定することはできません。私はこれに使用しようとしましたが、関数を呼び出すboost::any
変数よりもキャストする方法がわかりませんでした。他のアイデアはありますか?solver
calc()