A*******e 发帖数: 2419 | 1 lambda里会出现这种情况:
using Callback = std::function;
vector foo_list;
Callback foo_callback = [&foo_list](Foo foo) {
foo_list.emplace_back(std::move(foo));
}
这是因为下面的函数被认为是同一个函数?
void f(const Foo& foo);
void f(Foo foo);
总觉得上面的用法怪怪的。是不是直接声明为下面这个较好?由caller决定传foo时要
不要move。
using Callback = std::function; |
d****i 发帖数: 4809 | 2 不得不说,为什么要用这么怪里怪气的lambda?为什么不老老实实用平凡朴实的
function pointer或者functor? 还简单易懂容易debug容易维护。
【在 A*******e 的大作中提到】 : lambda里会出现这种情况: : using Callback = std::function; : vector foo_list; : Callback foo_callback = [&foo_list](Foo foo) { : foo_list.emplace_back(std::move(foo)); : } : 这是因为下面的函数被认为是同一个函数? : void f(const Foo& foo); : void f(Foo foo); : 总觉得上面的用法怪怪的。是不是直接声明为下面这个较好?由caller决定传foo时要
|
A*******e 发帖数: 2419 | 3 用functor是更清楚,但本质问题是一样的。
struct GetFoo {
void operator()(Foo foo) {
v.emplace_back(std::move(foo));
}
vector v;
};
using Callback = std::function;
这里GetFoo可以当Callback用吗?
引入std::move之后,call-by-value和call-by-ref用法有区别了。只读时用ref,需要
复制时用value+move。但编译器似乎还是认为这是同一个函数,故有此疑惑。
【在 d****i 的大作中提到】 : 不得不说,为什么要用这么怪里怪气的lambda?为什么不老老实实用平凡朴实的 : function pointer或者functor? 还简单易懂容易debug容易维护。
|