【发布时间】:2014-04-20 11:12:24
【问题描述】:
我正在开发一个函数,该函数采用众所周知的参数范围,但我不想为每种情况编写许多不同的函数。有没有办法定义一个函数的“模式”并让预编译器根据这个模式生成函数?
示例。我有以下功能:
int addition_in_range_of_10 (int a, int b) { return a+b; }
我想生成以下函数:
int addition_in_range_of_10_1_1 () {
return 2;
}
int addition_in_range_of_10_1_2 () {
return 3;
}
int addition_in_range_of_10_1_3 () {
return 4;
}
...
int addition_in_range_of_10_10_10 () {
return 20;
}
我想使用函数指针运行这些函数:
int (*funp)();
if(...) {
funp = addition_in_range_of_10_1_3;
}
funp();
现在我编写了自己的应用程序,该应用程序从上面列举的模板函数执行,但将代码复制到我的应用程序然后生成 cpp 文件然后编译是不舒服的。我想让它自动化。
//{A=1,2,3,4,5,6,7,8,9,10;B=1,2,3,4,5,6,7,8,9,10}
int addition_in_range_of_10_{A}_{B} () {
return {A}+{B};
}
这是我的问题。是否有任何预处理库、机制或可以自动执行的东西?
出于性能考虑,我只想从代码中删除变量。这些函数要复杂得多,如果有常量而不是变量,效果会更好,而且因为这些变量只使用一些众所周知的值,所以我想将它们更改为常量而不是变量。
【问题讨论】:
-
您似乎要创建一个查找表。
-
没有冒犯,但你不相信你的编译器能正确乘法吗? :)
-
我认为这是一个人为的例子,只是为了说明您正在寻找的机制。问题是,它如此 做作,很难在这里提出任何明智的建议。您要解决的真正问题是什么?
-
@nosbor:不过,这些都是等价的问题。如果你在运行时有
a=5和b=7,你不能在没有查找表机制的情况下调用expensiveFunction_5_7()。 -
@nosbor 函数指针将比 const 查找数组或 constexpr 函数慢很多。
标签: c++ c c-preprocessor metaprogramming precompile