C++ 11 람다를 사용하여 응용 프로그램을 개발하기 시작했으며 일부 유형을 함수 포인터로 변환해야합니다. 내가 람다 내에서 함수 또는 메소드 지역 변수를 사용해야하는 경우에함수 포인터에 대한 C++ 11 람다
void (* test)() = []()
{
puts("Test!");
};
test();
내 문제는 다음과 같습니다 : 이것은 GCC 4.6.0에서 완벽하게 작동
const char * text = "test!";
void (* test)() = [&]()
{
puts(text);
};
test();
G ++ 4.6.0 캐스트 오류 코드를 제공합니다 :
main.cpp: In function 'void init(int)':
main.cpp:10:2: error: cannot convert 'main(int argc, char ** argv)::<lambda()>' to 'void (*)()' in initialization
사용 자동, 그것은 확인을 작동하는 경우 :
const char * text = "Test!";
auto test = [&]()
{
puts(text);
};
test();
내 질문은 : [&]으로 람다 유형을 어떻게 만들 수 있습니까? 내 경우에는 STL std :: function (내 프로그램은 C++ RTTI 및 EXCEPTIONS 런타임을 사용하지 않기 때문에)을 사용할 수없고이 문제를 해결하기위한 간단한 구현 기능이 있습니까?
[XY 문제]의 인스턴스와 유사합니다 (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). –
캡쳐 람다를 함수 포인터로 변환 할 수 없습니다. 당신이하려고하는 것을 설명하십시오. –
실제 문제가 무엇인지 설명하지는 않았지만 시도한 솔루션을 잘못 설명했습니다. 실제 문제가 무엇인지 알려주세요. – thecoshman