gpt4 book ai didi

c++ - 如何使用 `Function Call Operator` 将 `rvalue` 类型加载到我的对象?

转载 作者:行者123 更新时间:2023-11-28 06:01:47 24 4
gpt4 key购买 nike

我有这样一个类:

template<typename T>
class MyClass
{
public:
// ...
T && operator()(uint64_t i, uint64_t j); // I want to add a member function like this.
T & operator()(uint64_t i, uint64_t j);
const T & operator()(uint64_t i, uint64_t j) const;
// ...
};

当我修改代码时,我意识到每次尝试将对象设置为 (i,j) 时都会复制 T 类型的存储对象> 位置。如果可能的话,我想使用 move 语义并避免这种不必要的复制吗?是否可以像上面的代码一样通过添加第三个运算符来解决这个问题?

我的目标是在代码中像这样访问 MyClass 实例:

MyClass<Element> myclass;
// ...
Element element; // 'Element' is movable.
// ...
myclass(2, 3) = std::move(element); // 'element' is no longer needed, it can be moved.

我该怎么做?

最佳答案

首先你不能根据返回类型重载。但是,这不是您的问题,因为您不需要下标运算符的额外重载。

为了避免不必要的复制,并且由于 class Element 对象是可 move 的,您可以使用 std::swap 而不是直接赋值。

std::swap(myclass(2, 3), element);

自 C++11 以来,std::swap 避免了不必要的复制,因为它使用了 move 语义。

关于c++ - 如何使用 `Function Call Operator` 将 `rvalue` 类型加载到我的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33141544/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com