这是一个初学者的问题:
如何为在模板类之外使用的函数使用模板参数?
这是我的使用模板的矩阵类。
template<typename T, int N, int M>
class matrix {
T vals[N][M] = {};
public:
matrix() {
//sth
}
};
现在,我要为该类 之外的内容编写一个运算(乘法)。 模板参数如何工作?
matrix<?????????> operator*(matrix<<?????????>& m1, matrix<?????????>& m2) {
//multiply code
}
我在写问号的地方需要写什么?
相同? typename T, int N, int M
?
答案 0 :(得分:4)
好吧...如果要经典矩阵乘法...那么如果给定D1xD2矩阵乘以D2xD3矩阵,则需要D1xD3矩阵...
template <typename T, std::size_t D1, std::size_t D2, std::size_t D3>
matrix<T, D1, D3> operator* (matrix<T, D1, D2> const & m1,
matrix<T, D2, D3> const & m2)
{
// ....
}
主题之外:我建议(如您在示例中所见)对尺寸使用无符号值(也许为std::size_t
)。
答案 1 :(得分:3)
app-name
᠁
[-]⋯Users
᠁
᠁⋯⋯ Peter: peter@gmail.com
实时:https://godbolt.org/z/5dJOXK
您也可以将它写为朋友,而不必重新输入所有模板内容:
template<typename T, int N, int M>
class matrix {
T vals[N][M] = {};
public:
matrix() {
//sth
}
};
template <typename T, int N, int M>
matrix<T, N, M> operator*(matrix<T, N, M> l, matrix<T, N, M> r) {
return matrix<T, N, M>{};
}
或作为成员:
template<typename T, int N, int M>
class matrix {
T vals[N][M] = {};
public:
matrix() {
//sth
}
friend matrix<T, N, M> operator*(matrix<T, N, M> l, matrix<T, N, M> r) {
return matrix<T, N, M>};
}
};