使用c++函数模板实现一组函数
Using C++ function templates for a group of functions
根据矩阵大小,我有不同的方阵乘法函数,从8x8到20x20不等。这些函数彼此不同,因为每个函数采用不同的优化策略,即不同的循环排列和不同的循环展开因子。在程序的生命周期中,矩阵的大小是不变的。我的目标是减少决定必须使用哪个函数的时间。例如,幼稚的实现是:
if (matrixSize == 8) C = mxm8(A, B);
else if (matrixSize == 9) C = mxm9(A,B);
...
else if (matrixSize == 20) C = mxm20(A,B);
在这种情况下,决定每个矩阵乘法使用哪个函数所花费的时间是非平凡的。可以立即调用适当的函数,也许使用c++函数模板?
如果矩阵的大小在程序的生命周期内是不变的,那么您可以使用std::array
(std::array
)作为矩阵的类型。然后,您可以有一个乘法函数,并为您支持的不同类型重载它,选择将在编译时完成。
如果您为矩阵使用一些自定义类,您可以采用这种方法,并使其成为模板类,其中大小是模板参数。
如果在编译时知道矩阵的大小,则可以使用如下格式:
constexpr auto matrixSize = 8;
C = mxm<matrixSize>(A, B);
并提供任何已知大小的专门化。
如果在编译时不知道函数的大小,可以将函数存储在map中,如下所示:
map<size_t, function<matrix (const matrix&, const matrix&>> multipliers;
multipliers.insert(make_pair(8, mxm8));
,然后使用如下格式:
C = multipliers[matrixSize](A, B);
相关文章:
- C++ 将一组对象传递给抽象类的成员函数
- 字数统计函数在将单词添加到一组唯一单词时遇到问题
- 在一组模板化对象上运行函数
- 如何插入一组已传递给已经声明的函数的值集
- 将一组类转换为类模板并避免构造函数模棱两可
- 如何查找具有一组整数的函数的'max absolute sum'
- 应用一组 N 个函数的第一个有效函数
- 在高性能计算中更好的做法是:将数据结构传递到一个函数或一组变量中
- 如何在 C(首选)/C++ 中按顺序将一组 1D 数组传递给函数
- 使用一组规则对数组进行洗牌,并从函数返回值
- 我怎样才能在 C++ 中拥有一组函数
- 如何提取可变参数函数的一组选定参数,并使用它们调用另一个函数
- 使用可变宏或模板来实现一组函数
- 用可变数量的参数成功地重写一组函数
- 同时将一组函数编译为.LIB和.DLL
- 我应该更喜欢mixin还是函数模板来将行为添加到一组不相关的类型中
- c++结构:以一定的时间速率重复一组函数
- 使用c++函数模板实现一组函数
- Visual Studio为一组函数分离.h和.cpp文件
- 在C语言中,一组函数的名称可能因操作数类型的不同而不同,称为理论静态多态函数