【发布时间】:2020-09-27 17:53:14
【问题描述】:
我正在定义一个这样的类:
class foo {
public:
// I define const and non-const versions of the 'visit' function
// nb. the lambda is passed by reference
virtual void visitWith(std::function<void(foo&)>&);
virtual void visitWith(std::function<void(const foo&)>&) const;
};
foo 可以有孩子,所以我们的想法是递归地访问 foo 及其所有孩子。
当我尝试使用它时,例如。像这样:
foo f;
f.visitWith([&](const foo&) {
// Do something here
});
我得到编译器错误。编译器不知道该怎么做。
我可以通过添加这样的类型转换使其工作:
foo f;
f.visitWith( (std::function<void(const foo&)>) [&](const foo&) {
// Do something here
});
但这太可怕了。
我怎样才能让它整齐地工作?
编辑:
这可能是 Visual C++ 的问题,它拒绝编译这里给出的代码:
我尝试编译时的 VC++ 输出是:
Edit2:不,Visual C++ 是正确的,代码是模棱两可的。请参阅下面的解决方案...
【问题讨论】:
-
这是just a typo,因为问题不在于 lambda 的参数,而在于 lambda 的传递方式。
标签: c++ lambda overloading