gpt4 book ai didi

C++ 将仿函数对象作为 std::function 返回

转载 作者:行者123 更新时间:2023-12-01 15:10:33 25 4
gpt4 key购买 nike

我有一个返回 std::function 的工厂方法

class Builder {
public:
function<void(Data&)> build();
}

和一个仿函数对象
class Processor {
protected:
vector<int> content_;
public:
void operator()(Data&) {
....
}
}

现在我想在工厂方法中返回仿函数,我写
function<void(Data&)> build() {
Processor p;
// Add items to p.content_

function<void(Data&)> ret(p);

return ret;
}

我的问题是:将 ret保留一份 p 的拷贝?如果是,当 p.content_很大,会不会成为负担?建议的实现方式是什么?

最佳答案

一个 std::function持有并拥有它的值(value)。实际上,它需要可复制的可调用对象,以便在复制自身时可以复制它。

您的功能会像这样非常好,并且可能更快:

function<void(Data&)> build() {
Processor p;

// fill items

return p; // p moved into the returned std::function (since C++14)
}

但是,如果您复制 std::function周围,​​ Processor对象也将被复制,因此复制 std::function 的成本取决于它包含的类型(就像任何类型删除工具一样)

关于C++ 将仿函数对象作为 std::function 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62237259/

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