c++ - 部分模板专业化以展开特定大小的循环
问题描述
我写了一个可以采用不同大小的矩阵类。现在我想展开特定尺寸的循环。我该怎么做?
我似乎可以开始工作的唯一方法是二维的儿童班。但是我想避免这种情况,因为它会导致很多重复的代码。
例如:
#include <iostream>
template<class T, size_t M, size_t N>
class matrix
{
matrix<T,M,N>& operator*= (const matrix<T,M,N> &B);
};
template<class T, size_t M, size_t N>
matrix<T,M,N>& matrix<T,M,N>::operator*= (const matrix<T,M,N> &B)
{
// ...
return *this;
}
int main()
{
return 0;
}
现在我想为我展开所有循环以提高效率M = 2
的情况添加一个实现。N = 2
(我已经在之前的实现中对展开进行了计时,它似乎确实很有意义,特别是对于本示例中所展示的更复杂的操作。)
解决方案
您可以委托operator*=
给重载的函数模板。例如:
template<class T, size_t M, size_t N>
class matrix
{
public:
matrix<T,M,N>& operator*=(const matrix<T,M,N>&);
};
// Generic version.
template<class T, size_t M, size_t N>
void inplace_dot(matrix<T,M,N>& a, matrix<T,M,N> const& b);
// Overload for 2x2 matrix.
template<class T>
void inplace_dot(matrix<T,2,2>& a, matrix<T,2,2> const& b);
template<class T, size_t M, size_t N>
matrix<T,M,N>& matrix<T,M,N>::operator*=(const matrix<T,M,N>& b)
{
inplace_dot(*this, b);
return *this;
}
推荐阅读
- python - 致命的 Python 错误:尝试在 Visual Studio 2019 中调试 C++ python 模块时出现 _PyInterpreterState_GET
- python - 如何在没有 Python 的情况下读取 .py
- python - Xlsxwriter 用包含多个单词的工作表名称和将数字作为文本写入 excel 来绘制奇怪的行为
- c++ - 类中的公共数据成员
- java - 无法在 TextView 上设置文本。给出 NullPointerException
- kubernetes - 如何让 My First ingress 在裸机 NodeIP 上运行?
- arrays - 使用反应钩子和受控组件更改获取的列表数组的值
- google-sheets - 如何使用查询根据谷歌表中的某些条件过滤数据
- python - 使用属性装饰器时,类对象同时包含 _和属性
- spring-boot - 如果我们在 K8s 中部署应用程序时使用 Eureka Discovery、Ribbon 等 Spring Cloud,何时使用?