我有一些使用模板的代码,因此我可以在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;
  ....
}

09-10 04:39
查看更多