【发布时间】:2012-02-12 13:27:03
【问题描述】:
这似乎适用于我尝试过的平台:
#include <iostream>
// extern "C" linkage
extern "C" void foo(void (*fn_ptr)(int));
namespace {
struct bar {
static void f(int);
};
}
int main() {
// Usually works on most platforms, not guaranteed though:
foo(bar::f);
// Probably equally bad or worse?
foo([](int x) { std::cout << x << std::endl; });
}
但又是passing a static member function also worked on these platforms when it was not required to。
有没有办法强制 lambda 具有适当的链接以使其安全和便携?还是已经有了?
【问题讨论】:
-
你所拥有的已经安全了。
-
@ildjarn - § 7.5.1 - “具有不同语言链接的两个函数类型是不同的类型,即使它们在其他方面相同。”
-
是的,那个骗子也得到了我的投票