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