예를 들어
class T { typedef void (T::*ptmf)(); void func( ptmf fu ){...} };
이런 클래스가 있으면
T의 멤버 함수안에서 func 안에 람다를 넣고 싶거든요.
그래서
void T::func2() { func( []() {} ); } 뭐 이런식으로 쓰고 싶습니다.
[] 안에 캡쳐를 해도 안되네요. 도움 부탁합니다.
람다는 C++11 표준에 있는데...
http://gcc.gnu.org/projects/cxx0x.html
GCC 4.5 에서는 람다기능이 있네요..
안됩니다. 람다는 표현식이기 때문에 일정한 타입을 가지지 않습니다. 이게 안되는건 멤버함수이기 때문에 안되는게 아니라, 람다에게는 타입이 없기 때문에 안됩니다. 고정되지 않은 타입을 인자로 받을수 있는 템플릿을 쓰거나, 함수객체를 일반화한 클래스인 std::function을 이용하는 수밖에 없습니다.
그냥 함수포인터면 람바도 넣을 수 있습니다. 단 []부분에 아무것도 안받는 람다의 경우로 한정됩니다.
예를 들면 [](int a, int b) -> int { return a + b; } 이런 람다는 int (*pfunc)(int, int)에서 pfunc로 넣어줄 수 있습니다.
그런데... 멤버함수포인터는 이런 람다의 성질과 관계없이 일단 일반함수포인터와 다릅니다.
그러니 람다를 멤버함수포인터를 인자로 가져야 하는 부분에 넣어줄 수는 없을 것입니다.
텍스트 포맷에 대한 자세한 정보
<code>
<blockcode>
<apache>
<applescript>
<autoconf>
<awk>
<bash>
<c>
<cpp>
<css>
<diff>
<drupal5>
<drupal6>
<gdb>
<html>
<html5>
<java>
<javascript>
<ldif>
<lua>
<make>
<mysql>
<perl>
<perl6>
<php>
<pgsql>
<proftpd>
<python>
<reg>
<spec>
<ruby>
<foo>
[foo]
C++11 새로운 표준.
람다는 C++11 표준에 있는데...
http://gcc.gnu.org/projects/cxx0x.html
GCC 4.5 에서는 람다기능이 있네요..
안됩니다. 람다는 표현식이기 때문에 일정한 타입을
안됩니다. 람다는 표현식이기 때문에 일정한 타입을 가지지 않습니다.
이게 안되는건 멤버함수이기 때문에 안되는게 아니라, 람다에게는 타입이 없기 때문에 안됩니다.
고정되지 않은 타입을 인자로 받을수 있는 템플릿을 쓰거나, 함수객체를 일반화한 클래스인 std::function을 이용하는 수밖에 없습니다.
그냥 함수포인터면 람바도 넣을 수 있습니다. 단
그냥 함수포인터면 람바도 넣을 수 있습니다.
단 []부분에 아무것도 안받는 람다의 경우로 한정됩니다.
예를 들면
[](int a, int b) -> int { return a + b; }
이런 람다는 int (*pfunc)(int, int)에서 pfunc로 넣어줄 수 있습니다.
그런데... 멤버함수포인터는 이런 람다의 성질과 관계없이
일단 일반함수포인터와 다릅니다.
그러니 람다를 멤버함수포인터를 인자로 가져야 하는 부분에 넣어줄 수는 없을 것입니다.
댓글 달기