简体   繁体   English

可以将派生对象转换为c ++模板类中的基本引用吗?

[英]Can derived object cast to base reference in c++ template class?

all. 所有。 I am trying to learn something about template inherit. 我正在尝试学习有关模板继承的知识。 I want to cast a temp derived object to its base reference. 我想将临时派生对象转换为其基本引用。 But I come across this problem: 但是我遇到了这个问题:

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;
}

and in main, we have: 总的来说,我们有:

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.
apply(m1, apply(m1, m2));//Fail

The problem here is that the inner apply returns a temporary, which cannot bind to the non-const reference parameter of the outer apply . 这里的问题是内部apply程序返回一个临时对象,该临时对象不能绑定到外部apply的非常量引用参数。

If you can make the parameters MatrixBase<_Scalar> const& it would be a possible match. 如果可以将MatrixBase<_Scalar> const&参数MatrixBase<_Scalar> const&则可能是匹配的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM