Может ли лямбда иметь внешнюю "С" связь? - PullRequest
14 голосов
/ 04 сентября 2011

Это работает на платформах, которые я пробовал:

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

, но опять же передача статической функции-члена также работала на этих платформах, когда не требовалось .

Есть ли способ заставить лямбду иметь подходящую связь, чтобы сделать ее безопасной и переносной?Или это уже?

1 Ответ

7 голосов
/ 04 сентября 2011

Нет.В конечном счете, лямбды - это объекты, у которых есть оператор вызова функции.Лямбда без захвата может быть преобразована в указатель функции соответствующего типа, но указатель этой функции будет функцией C ++ со связью C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...