λ可以有外联"C"吗?

Can a lambda have extern "C" linkage?

本文关键字:      更新时间:2023-10-16

这似乎在我尝试过的平台上工作:

#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; });
}

但是传递静态成员函数在这些平台上也可以在不需要的情况下工作。

是否有一种方法可以强制lambda具有合适的链接以使其安全和可移植?或者已经是这样了?

No。lambda最终是具有函数调用操作符的对象。无捕获的lambda可以转换为相应类型的函数指针,但该函数指针将是具有c++链接的c++函数。

相关文章:
  • 没有找到相关文章