2011-04-06 8 views

답변

35

확실한 점은 std::function이 비어있는 곳이 가장 쉽다는 것입니다.

int main() { 
    std::function<int()> intfunc; 
    int x = intfunc(); // BAD 
} 
+0

방금 ​​검색을 수행했으며 가장 쉬운 예일뿐만 아니라 * 예 *처럼 보입니다. :-) –

+0

@Howard : 정말요? 그렇다면 [이 답변 (http://stackoverflow.com/questions/5556183/make-c-crash-without-casting/5557843#5557843)은 어떻게 'bad_function_call'을 던집니까? –

+4

가장 좋은 추측은 참조 된 응답이 DeadMG의 응답에 의해 주어진 것과 동일한 경우로 귀결된다는 것입니다 : 빈'std :: function'을 호출하십시오. 죄송합니다. 현재 람다 코드를 테스트 할 수 없습니다. 나는 최신 람다 스펙을 ​​두 번 확인했고 거기에 아무것도 발견하지 못했고'bad_function_call'을 던졌습니다. 'bad_function_call'에 대한 최신 초안을 다시 검색하여'bad_function_call'이 하이픈이 될 수있는 상황을 파악하고 던져진 경우를 찾지 못했습니다. 아직도 내가 놓친 것이 가능하다. 그것을 찾으면, 우리에게 포인터를 올려주세요. –

2

std::function<void(int,int)> f; 
    f(33,66); // throws std::bad_function_call 

C의 나에게 없음 크레딧 .... 그 니콜라 Josuttis에 학자 "호출 대상을하지 않고 함수 호출을 수행하면 유형 표준 : bad_function_call의 예외를 throw"++ 표준 Lib

+1

스택 교환은 "<>"동봉 코드를 사용하지 않습니다! "<>"코드 안의 내용은 보이지 않습니다. 전에 나를 죽음에 돌이키십시오 .... ahem ... std :: function f; f (33,66); // std :: bad_function_call을 던집니다. –

0

내 경우에는 캡처 목록에 문제가있었습니다. 나는 재귀 람다 함수를 가지고있다.

//decl 
std::function<void(const SBone*, const core::vector3df&, const core::quaternion&)> f_build; 
f_build = [&f_build](const SBone* bone, const core::vector3df& pos, const core::quaternion& rot) 
{ 
... 
} 

캡처 목록에 f_build에서 & 누락 나쁜 전화를 생성합니다.

관련 문제