我在将 C++0x lambda 函数作为第二个参数传递给makecontext
(来自 ucontext.h)。的签名makecontext
is:
void makecontext(ucontext_t*, void (*)(), int, ...);
以前,我能够应用 C 风格(void (*)(void))
转换为我使用的全局作用域函数。 Areinterpret_cast
在 C++ 中就可以解决这个问题。但是,使用 C++0x lambda 函数时,出现以下错误:
error: invalid cast from type ‘main(int, char**)::<lambda(int)>’ to type ‘void (*)()’
我正在使用 G++ 4.6。以下代码足以产生编译错误:
#include <ucontext.h>
void f1(int i) {}
int main(int argc, char *argv[]) {
ucontext_t c;
makecontext(&c, (void (*)(void))f1, 1, 123); // ok
makecontext(&c, reinterpret_cast<void (*)(void)>(f1), 1, 123); // ok
auto f2 = [](int i){};
makecontext(&c, (void (*)(void))f2, 1, 123); // error
makecontext(&c, reinterpret_cast<void (*) (void)>(f2), 1, 123); // error
return 0;
}