如何在不复制的情况下将值传递给基类函数?

时间:2020-10-11 12:58:01

标签: c++ oop inheritance overriding move-semantics

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

在这里,我将值按值传递给X::insert函数,然后将其移动到向量,以便如果发生异常,则该异常发生在insert函数之外,因此类X仍然存在处于有效状态,而不必处理insert函数内部的异常。

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

除了创建两个插入函数(一个使用左值,另一个使用右值)之外,还有什么方法可以解决此问题?如果不是,那么两个函数(左值版本和右值版本)应该如何?

0 个答案:

没有答案