gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:30:50 25 4
gpt4 key购买 nike

全部。我正在尝试学习有关模板继承的知识。我想将一个临时派生对象转换为其基础引用。但是我遇到了这个问题:

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

主要是,我们有:

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

这里的问题是内部 apply返回一个临时的,它不能绑定(bind)到外部 apply 的非常量引用参数.

如果可以使参数MatrixBase<_Scalar> const&这将是一个可能的匹配。

关于c++ - 派生对象可以转换为 C++ 模板类中的基引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35793226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com