C++ 在c++;模板类?
全部。我正在努力学习一些关于模板继承的知识。我想将临时派生对象强制转换为其基本引用。但我遇到了这个问题:C++ 在c++;模板类?,c++,templates,inheritance,reference,polymorphism,C++,Templates,Inheritance,Reference,Polymorphism,全部。我正在努力学习一些关于模板继承的知识。我想将临时派生对象强制转换为其基本引用。但我遇到了这个问题: typedef long size64_t; //////Base class template <typename _Scalar> class MatrixBase{ public: virtual _Scalar operator()(size64_t rowid, size64_t colid) = 0; }; //////Derived class 1 temp
typedef long size64_t;
//////Base class
template <typename _Scalar>
class MatrixBase{
public:
virtual _Scalar operator()(size64_t rowid, size64_t colid) = 0;
};
//////Derived class 1
template <typename _Scalar>
class MatrixHolder : public MatrixBase<_Scalar>{
public:
MatrixHolder(){};
inline _Scalar operator()(size64_t rowid, size64_t colid){return 0;}
};
//////Derived class 2
template <typename _Scalar>
class Matrix : public MatrixBase<_Scalar>{
public:
Matrix(){};
inline _Scalar operator()(size64_t rowid, size64_t colid){return 0;}
};
//////The function with parameters as Base class reference, wanting to get derived object as input.
template <typename _Scalar>
MatrixHolder<_Scalar> apply(MatrixBase<_Scalar>& lhs, MatrixBase<_Scalar>& rhs){
MatrixHolder<_Scalar> result;
return result;
}
typedef长尺寸64;
//////基类
模板
类矩阵基{
公众:
虚拟标量运算符();
};
//////派生类1
模板
类MatrixHolder:公共MatrixBase{
公众:
MatrixHolder(){};
内联_标量运算符()(size64_t rowid,size64_t colid){返回0;}
};
//////派生类2
模板
类矩阵:公共矩阵库{
公众:
矩阵(){};
内联_标量运算符()(size64_t rowid,size64_t colid){返回0;}
};
//////以参数作为基类引用的函数,希望获取派生对象作为输入。
模板
MatrixHolder应用(MatrixBase&lhs、MatrixBase&rhs){
矩阵结果;
返回结果;
}
总的来说,我们有:
void main(){
Matrix<double> m1;
Matrix<double> m2;
apply(m1, m2);//Sucess
apply(m1, apply(m1, m2));//Fail
}
the compiler said:
note: candidate function [with _Scalar = double] not viable: no known conversion from
'MatrixHolder<double>' to 'MatrixBase<double> &' for 2nd argument
MatrixHolder<_Scalar> apply(MatrixBase<_Scalar>& lhs, MatrixBase<_Scalar>& rhs){
^
1 error generated.
void main(){
矩阵m1;
矩阵m2;
应用(m1,m2);//成功
应用(m1,应用(m1,m2));//失败
}
编辑说:
注:候选函数[with _Scalar=double]不可行:没有已知的从
第二个参数的“MatrixHolder”到“MatrixBase&”
MatrixHolder应用(MatrixBase&lhs、MatrixBase&rhs){
^
生成1个错误。
这里的问题是,内部的apply
返回一个临时值,它不能绑定到外部的apply
的非常量引用参数
如果您可以使参数
MatrixBase常量&
,则可能匹配。我认为您的问题是使用double作为模板参数。如图所示,似乎不可能。您正在尝试将非常量引用绑定到临时对象。使参数应用常量引用。@molbdnilo意味着所有临时对象都应该是const?@maple否,函数的参数应该是;const MatrixBase&rhs
(顺便说一下,这与模板或继承无关。)@StefanReinhardt使用类型double作为模板参数不是问题。链接到的问题是使用浮点值作为模板参数。
apply(m1, apply(m1, m2));//Fail