我有一些使用模板的代码,因此我可以在float,real,double之间切换,以提高计算精度或节省内存。
现在,我想让用户在每次执行时选择精度,但是我不确定该怎么做。
假设在我的main.cpp中
// main.cpp
Object<double> obj;
obj.doSomething();
有没有一种方法可以“设置”所使用的类型?像下面的东西?
//main.cpp
std::cout << "Choose Precision ": << std::endl;
std::cin >> PRECISION; // eg float or double
? fix precision and use generic code below with it ?
Object<PRECISION> obj;
obj.doSomething();
更新
现在很明显我不能在执行时。谢谢。
我是否仍可以在主体中使用通用模板代码,以便仅编辑1行即可以不同的精度编译代码?
Kevin Cadieux回答的更新:
typedef double MyPrecision;
最佳答案
您无法在运行时设置模板的类型,但是可以选择要使用的模板专业化名称。例如:
template <typename T>
void doStuff<T>()
{
Object<T> obj;
// do something with obj
}
int main()
{
// same PRECISION getting code
switch (PRECISION) {
case (x) :
doStuff<double>();
break;
case(y) :
doStuff<float>();
break;
....
}