我需要通过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);
}
答案 0 :(得分:0)
由于您可以更改MyClass1
和MyClass2
,因此可以通过右值参考来获取该函数,然后move
将其与
#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);
}