gpt4 book ai didi

c++ - 在 C++ 中避免 lambda 拷贝

转载 作者:太空宇宙 更新时间:2023-11-04 13:25:24 28 4
gpt4 key购买 nike

我需要通过 MyClass2 将用户定义的 lambda 传递给 MyClass1。我想确保只有一步,没有拷贝。下面的代码实现了吗?有没有更好的方法来做到这一点(比如使用编译器完成的隐式移动)?

注意:我可以控制 MyClass1 和 MyClass2

#include <functional>

using MyFunction = std::function<int(int)>;

class MyClass1 {
public:
MyClass1(const MyFunction& func): mFunc(std::move(func)) {}

private:
MyFunction mFunc;
};

class MyClass2 {
public:
MyClass1* getClass1(const MyFunction& func) {
return new MyClass1(func);
}
};

int main() {
MyClass2 cl2;

const auto& f = [] (int i) { return i; };

MyClass1* cl1 = cl2.getClass1(f);
}

最佳答案

由于您可以更改 MyClass1MyClass2,您可以通过右值引用获取该函数,然后移动

#include <functional>

using MyFunction = std::function<int(int)>;

class MyClass1 {
public:
MyClass1(MyFunction&& func): mFunc(std::move(func)) {}

private:
MyFunction mFunc;
};

class MyClass2 {
public:
MyClass1* getClass1(MyFunction&& func) {
return new MyClass1(std::move(func));
}
};

int main() {
MyClass2 cl2;
const auto& f = [] (int i) { return i; };

MyClass1* cl1 = cl2.getClass1(f);
}

Live Example

关于c++ - 在 C++ 中避免 lambda 拷贝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33554072/

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