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函数内部的异常。
但是在这里,类Y
从X
继承。我想覆盖X::insert
。问题在于它们必须具有相同的签名,因此,我必须先在Y::insert
中复制它,然后将其传递并在X::insert
中再次复制。
除了创建两个插入函数(一个使用左值,另一个使用右值)之外,还有什么方法可以解决此问题?如果不是,那么两个函数(左值版本和右值版本)应该如何?