C++ 如何在不复制的情况下将值传递给基类函数? 模板 X类 { std::向量值; 虚空插入(T值) { 值。推回(标准::移动(值)); } }; 模板 Y类:公共X类 { 虚拟空插入(/*常量T&value*/T值)重写 { 做一些事情(价值); X::插入(值); } };

C++ 如何在不复制的情况下将值传递给基类函数? 模板 X类 { std::向量值; 虚空插入(T值) { 值。推回(标准::移动(值)); } }; 模板 Y类:公共X类 { 虚拟空插入(/*常量T&value*/T值)重写 { 做一些事情(价值); X::插入(值); } };,c++,oop,inheritance,overriding,move-semantics,C++,Oop,Inheritance,Overriding,Move Semantics,这里,我将一个值一个值传递给X::insert函数,然后将其移动到向量,这样,如果发生异常,它将发生在insert函数之外,因此类X将保持有效状态,而不必处理insert函数内部的异常 但是在这里,类Y继承自X。我想覆盖X::insert。问题是它们必须具有相同的签名,因此,我必须首先在Y::insert中复制它,然后在X::insert中传递并再次复制它 除了创建两个insert函数(一个接受左值,另一个接受右值)之外,还有什么方法可以解决这个问题吗?如果没有,这两个函数(左值版本和右值版本)

这里,我将一个值一个值传递给
X::insert
函数,然后将其移动到向量,这样,如果发生异常,它将发生在insert函数之外,因此类
X
将保持有效状态,而不必处理insert函数内部的异常

但是在这里,类
Y
继承自
X
。我想覆盖
X::insert
。问题是它们必须具有相同的签名,因此,我必须首先在
Y::insert
中复制它,然后在
X::insert
中传递并再次复制它


除了创建两个insert函数(一个接受左值,另一个接受右值)之外,还有什么方法可以解决这个问题吗?如果没有,这两个函数(左值版本和右值版本)应该是什么样子?

X::insert(std::move(value))T
支持移动语义,则应避免复制。@DanielLangr谢谢<代码>X::插入(标准::移动(值))T支持移动语义,则应避免复制。@DanielLangr谢谢!
template <typename T>
class X
{
    std::vector<T> values;

    virtual void insert(T value)
    {
        values.push_back(std::move(value));
    }
};

template <typename T>
class Y : public X<T>
{
    virtual void insert(/* const T& value */ T value) override
    {
        do_stuff(value);
        X<T>::insert(value);
    }
};