预处理/预编译-用常量替换变量
Preprocessing/precompiling - replace variable by constant
我正在开发一个函数,它采用了一系列众所周知的参数,但我不想为每种情况编写许多不同的函数。有没有一种方法可以定义函数的"模式",并使预编译器基于该模式生成函数?
示例。我有以下功能:
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};
}
这是我的问题。是否有任何预处理库、机制或其他可以自动执行的功能?
出于性能考虑,我只想从代码中删除变量。如果用常量而不是变量,这些函数会复杂得多,效果也会更好。因为这些变量只使用一些众所周知的值,所以我想把它们改为常量而非变量。
对于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;
}
如果没有任何特殊工具,您可以做到这一点:
#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预处理器可以帮助您使其更加紧凑。看一下BOOST_PP_LOCAL_ITERATE
。
相关文章:
- #定义c-预处理器常量..我做错了什么
- 模板参数替换失败,并且未完成隐式转换
- 用C++中的一个变量定义一个常量
- 什么时候在C++中返回常量引用是个好主意
- 代理对象的常量正确性
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 通过多个头文件使用常量变量
- 用矩阵将函数中的整数值替换定义的常量
- 使用迭代器替换映射中的常量项的方法
- 编译器是否将常量变量替换为它们在 C++ 中的值
- 替换 C 代码宏并在C++代码中定义常量
- 替换常量:何时使用静态 constexpr 和内联 constexpr
- 将静态常量成员替换为静态成员函数的优点
- C 预处理器究竟如何应用常量和宏替换
- 将constexpr(用于在编译时计算常量)替换为模板
- "LL"可以从硬编码的整数常量中删除,并替换为"static_cast<uint64_t>(...)"吗?
- constexpr替换数学常量,如M_PI
- 预处理/预编译-用常量替换变量
- 用静态常量变量替换宏是值得怀疑的
- 编译时用整数替换字符串常量