Скажем, у меня есть шаблон класса с именем Compute
и другой класс с именем Function_A
с шаблоном функции-члена:
template <typename T> void Evaluate(T parameter)
Я вынужден использовать класс Function_A
как есть. Я уже знаю, что T
может быть только одного из двух типов type_1
и type_2
.
Есть ли способ иметь нечто подобное Compute<T> C
в качестве переменной-члена Function_A
вместо определения локального Compute<T>
объекта внутри Evaluate(...)
? Я знаю, что это противоречит философии использования шаблонов, следовательно, это, вероятно, невозможно, но в идеале в этом случае лучше сделать это?
Я попытался создать два члена Compute<type_1> C1
и Compute<type_2> C2
в Function_A
, а затем использовать их под if (typeid(T) == typeid(type_1))
, но это довольно отвратительно и вопреки философии использования шаблонов.
Просто чтобы проиллюстрировать, что я имею в виду:
template <class T>
class Compute
{
public:
T Function_B(T parameter)
{
return f.eval(parameter);
}
private:
SomeClass<T> f;
}
И класс:
class Function_A
{
public:
template <typename T> T Evaluate(T parameter)
{
Compute<T> C; //this is very expensive!
T value = C.Function_B(parameter);
return value;
}
private:
double SomeParameter;
//Compute<T> C; //conceptually what I want
}