部分模板专用化,用于展开特定大小的循环
Partial template specialization to unroll loops for specific sizes
我写了一个矩阵类,它可以采用不同的大小。现在我想展开特定尺寸的循环。我应该怎么做?
我似乎可以工作的唯一方法是2-D的儿童班。但我想避免这种情况,因为它会导致很多重复的代码。
例如:
#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;
}
相关文章:
- 用于C++中带有数组和指针的循环
- 并行用于C++17中数组索引范围内的循环
- 用于循环编译的 constexpr
- 用于在 C++ 中使用 while 循环查找下一个素数的简单函数
- 删除功能不适用于串行通信后多个循环中的多个实例
- C++ for 循环,用于反转数字 10 - 99
- C++用于循环跳过向量的元素?
- OpenMP 内部的函数调用用于循环
- C++11 基于范围的 for 循环,用于 std::list
- 循环中的线程 Runnin 用于对 c++ 中的数字求和
- 将 mmap 内存用于开销非常低的循环缓冲区
- 用于循环访问多个集合的数据结构
- 一个 2D 数组,并按行存储值.第一个循环用于行索引,第二个循环用于列索引
- Leetcode C++用于循环条件
- 相同的 for 循环适用于其他项目,但不适用于此项目。为什么?
- C++ 中用于二维数组的 for-each 循环
- 打开 MP 三用于减少的循环
- 虽然循环不适用于数组应用程序
- 用于增加 ASCII 值的循环
- 这种无操作 while 循环用于断言宏的原因是什么?