模板实例和继承的转换错误

Conversion error with template instance and inheritance

本文关键字:转换 错误 继承 实例      更新时间:2023-10-16

对不起,如果之前有人问过这个具体问题。这似乎很简单。

假设我有以下类 X

template<class T>
class X
{
    public:
      virtual X<T> DoStuff(const X<T>& arg) {
        X<T> res;
        //something with res
        return res;    
      }
}

和Y级

class Y: public X<float>
{
  //stuff
}

我主要执行以下操作:

Y var1;
Y var2;
Y var3 = var1.DoStuff(var2);
X<float> var4;
Y var3 = var4;

我得到"两个分配都要求从 X 转换为非标量类型 Y。

如何实现我想要的,即使用 Y 类作为 X 的别名?

如果您只想使用 Y 作为 X<float> 的别名,则为以下之一:

typedef X<float> Y;  // Old school
using Y = X<float>;  // If you want to be fancy and C++11'ish.

是最简单的解决方案。 如果你想添加一些更方便的函数来Y,你需要从X<float>添加一个构造函数

    Y(const X<float>& rhs) : X<float>(rhs) {}

仅凭这一点就足够了,但您可能希望直接从X<float>添加分配运算符并移动两者的版本。