【发布时间】:2016-11-12 14:05:14
【问题描述】:
以下代码无法编译:
typedef void(*RunnableFun)(int); //pointer-to-function type
void foo(RunnableFun f) {
}
void bar(const std::string& a) {
foo([&](int) -> void { std::cout << a; });
}
IntelliSense 告诉我
no suitable conversion function from "lambda []void (int)->void" to "RunnableFun" exists
编译器在抱怨
'void foo(RunnableFun)' : cannot convert argument 1 from 'bar::<lambda_796873cf40a6be4e411eb9df14f486bf>' to 'RunnableFun'
但以下内容确实可以编译:
typedef void(*RunnableFun)(int); //pointer-to-function type
void foo(RunnableFun f) {
}
void bar(const std::string&) {
// Notice the empty capture list
foo([](int) -> void { std::cout << "dummy"; });
}
如何在保留foo() 的签名的同时实现我在第一个代码示例中尝试的效果?
P.S.:将 foo 的签名更改为 void foo(std::function<void(int)> f) 会编译,但我可以不更改它吗?
【问题讨论】: