我正在研究一个采用众所周知的参数范围的函数,但我不想为每种情况编写许多不同的函数。有没有办法定义让我们说一个函数的“模式”,并让预编译器根据这种模式生成函数?
实施例。我有以下功能:
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};
}
这是我的问题。是否有任何预处理库,机制或可以自动执行的操作?
我只是想因为性能而从代码中删除变量。如果有常量而不是变量,那些函数要复杂得多,效果要好得多,并且因为这些变量只使用一些众所周知的值,所以我想将它们改为常量而不是变量。
答案 0 :(得分:3)
for C ++
#include <iostream>
template <int A, int B>
int addition_in_range_of_10(void){
return A + B;
}
int main(){
int (*funp)();
if(1) {
funp = addition_in_range_of_10<1,3>;
}
std::cout << funp() << std::endl;
return 0;
}
答案 1 :(得分:2)
没有任何特殊工具,您可以这样做:
#define MYADD(A,B) \
int addition_in_range_of_10_##A##_##B () { \
return A+B; \
}
#define MYADD2(A) \
MYADD(A,1) \
MYADD(A,2) \
...
MYADD(A,10)
MYADD2(1)
MYADD2(2)
...
MYADD2(10)
但是boost preprocessor可以帮助你使这个更紧凑。看看BOOST_PP_LOCAL_ITERATE
。