考虑以下代码
#include <iostream>
using namespace std;
template<int I>
int myfunc()
{
#if I
return 1;
#else
return 2;
#endif
};
int main()
{
cout<<myfunc<0>()<<endl;
cout<<myfunc<1>()<<endl;
}
但输出是
2
2
这样做的动机如下:
我有一个算法,需要在双点和定点中实现。一种解决方案是使用头文件根据宏标志定义数据类型,例如,
#ifdef __DOUBLE__
typedef double InputType;
.... // a lot of other types
typedef double OutputType;
#else //Fixed Point
typedef int InputType;
... // a lot of other types, which are matching with "__DOUBLE__" section
typedef int OutputType;
这种解决方案的缺点是您无法在运行时比较两种实现。您必须相应地设置宏两次,编译两次,运行两次,然后比较收集的数据。理想情况下,我希望有一个带有非类型参数的模板函数或模板类,它允许我在实现之间切换
任何其他可以实现类似目标的方法(在运行时比较两个实现)也是受欢迎的!
谢谢