在 C++11 中将函数指针替换为模板
Replace function pointers by templates in C++11
我有一个脚本(python符号工具箱),它可以自动生成C++11代码来填充矩阵的条目,例如:
double J00(double a, double b) {return a+b;}
double J01(double a, double b) {return a-b;}
double J10(double a, double b) {return -a+b;}
double J11(double a, double b) {return -a-b;}
现在我可以使用函数指针数组来存储所有函数并填充矩阵,即:
typedef double (*FillFunction) (double a, double b);
double J00(double a, double b) {return a+b;}
double J01(double a, double b) {return a-b;}
double J10(double a, double b) {return -a+b;}
double J11(double a, double b) {return -a-b;}
void main()
{
FillFunction J[2][2] = {{J00, J01}, {J10, J11}};
param0 = 0;
param1 = 1;
double Jresult[2][2];
for(int i = 0; i < 2; i++)
{
for(int j = 0; j < 2; j++)
{
Jresult[i][j] = J[i][j](param0, param1);
}
}
}
但是,这是我代码中对性能至关重要的部分,因此我宁愿不使用函数指针,特别是因为矩阵的大小和所有函数在编译时都是已知的。有没有一种巧妙的方法可以使用模板或类似的东西来做到这一点?
注意:我没有编译这段代码,所以我不知道它是否真的有效,但我希望你明白这个想法。
如果你仍然使用外部代码生成器,只需生成这个:
double Jresult[2][2] = {
{J00(param0, param1), J01(param0, param1)},
{J10(param0, param1), J11(param0, param1)},
};
相关文章:
- 模板参数推导/替换失败,lambda作为函数指针
- 如何在C++代码中灵活使用和替换标准::shared_ptr或标准::unique_ptr或原始指针?
- 如何在不更改现有函数语法的情况下将普通指针替换为共享指针
- 使用malloc和指针替换矩阵中的向量
- 优化替换共享指针内容时对分配器的调用
- 在 C++11 中将函数指针替换为模板
- C++正则表达式库,替换为函数指针
- 引用可以替换指针吗?
- 搜索并替换为指针
- 有没有更惯用的方法来替换指针
- 使用指针将输入中的空格替换为破折号符号
- 用指针替换循环索引器有什么好处吗?
- 我是否可以使用用户定义的转换将原始指针访问替换为通过类访问
- 在字符指针中用内存移动替换字符
- C++:将'this'指针与"get"函数一起使用以替换 cout 语句的可能性
- 将参数中的静态函数指针替换为实例中方法的指针
- 替换共享指针的内容
- C++程序员用C#中的指针替换
- 如何在c++中用引用替换指针
- 替换指针数组的元素