假设我正在实现一个集合并且我想向它添加一个元素,例如。
template <typename T>
class MyCollection
{
void add(const T& element);
};
现在,由于添加元素通常意味着复制它,出于效率的原因,让
添加以下版本
void add(T&& element)
.现在的问题是,显然这两个函数的代码是完全一样的,只是参数类型不同。目前我对C++的掌握有限,但我想知道是否有一种简单而惯用的方式来编写add
函数一次而不重写两次?
最佳答案
事实上,这是通过定义一个重载来解决的:
void add(T element) {
where_it_is_actually_stored.insert(std::move(element));
}
接下来,根据您是添加左值、由 move 的左值生成的右值还是临时对象,编译器将解析适当的构造函数,以便复制或 move 您的值参数。
关于c++ - 如何定义一个函数来处理 move 语义和复制语义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61467791/