Aus*_*son 6 c++ templates overloading
我试图解决为什么尝试编译这个问题
#include <iostream>
template <unsigned int ROWS,unsigned int COLS>
class Matrix{
public:
double dotProd(const Matrix<1,COLS>& other){
static_assert(ROWS==1,"dotProd only valid for two vectors");
return COLS;//place holder for dot product with row vectors
}
double dotProd(const Matrix<ROWS,1>& other){
static_assert(COLS==1,"dotProd only valid for two vectors");
return ROWS;//place holder for dot product with col vectors
}
};
int main(){
Matrix<1,32> bob;
Matrix<1,32> fred;
std::cout<<bob.dotProd(fred)<<std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这给了我这个错误:
overloadedTemplateMethod2.cpp: In instantiation of ‘class Matrix<1u, 1u>’:
overloadedTemplateMethod2.cpp:17:32: required from here
overloadedTemplateMethod2.cpp:9:16: error: ‘double Matrix<ROWS,COLS>::dotProd(const Matrix<ROWS, 1u>&) [with unsigned int ROWS = 1u; unsigned int COLS = 1u]’ cannot be overloaded
double dotProd(const Matrix<ROWS,1>& other){
^
overloadedTemplateMethod2.cpp:5:16: error: with ‘double Matrix<ROWS, COLS>::dotProd(const Matrix<1u, COLS>&) [with unsigned int ROWS = 1u; unsigned int COLS = 1u]’
double dotProd(const Matrix<1,COLS>& other){
^
Run Code Online (Sandbox Code Playgroud)
我知道填写参数的模板会导致第二个函数解析,double dotProd(const Matrix<1,1>& other)但我认为另一个应该解决double dotProd(const Matrix<1,32>& other),而不是Matrix<1,1>再次.
这里发生了什么?
当你这样做时:
bob.dotProd(fred)
Run Code Online (Sandbox Code Playgroud)
这些dotProd函数被实例化以解决对 的调用Matrix<1,32>。
我们可以说(免责声明:这并不完全是它的工作原理,但它给出了幕后发生的事情的想法)它们最终被声明为:
double dotProd(const Matrix<1,32>& other);
double dotProd(const Matrix<1,1>& other);
Run Code Online (Sandbox Code Playgroud)
忽略第一个,让我们专注于第二个。它需要 的新专业化Matrix,即:Matrix<1,1>。如果您考虑这样的专业化,那么如果您将模板参数替换为实际值,
您将获得什么声明?dotProd
double dotProd(const Matrix<1,1>& other); // Matrix<1, COLS>
double dotProd(const Matrix<1,1>& other); // Matrix<ROWS, 1>
Run Code Online (Sandbox Code Playgroud)
也就是说,您最终声明了一个参数列表没有区别的重载函数。因此出现错误。
main如果将函数主体替换为以下行,您可能会得到完全相同的错误:
Matrix<1,1> someone;
Run Code Online (Sandbox Code Playgroud)
换句话说,在和相等的Matrix情况下,您的类模板格式不正确。COLSROWS
| 归档时间: |
|
| 查看次数: |
91 次 |
| 最近记录: |