매개 변수로 람다 콜백을 가져 오는 C++ 함수를 구현하려고합니다. 문제는 콜백이 동일한 (호출 된) 클래스의 다른 함수에서 비동기 적으로 시작된다는 것입니다. 따라서 Lambda를 멤버 변수에 저장하여 콜백을 시작해야하는 비동기 함수에 액세스 할 수 있도록해야합니다.C++ Lambda를 콜백으로 사용할 멤버 변수에 저장 하시겠습니까?
멤버 변수를 사용하여 Lambda를 선언하고 설정하고 호출하는 방법을 모두 시도했지만 코드가 할당 또는 호출에서 항상 충돌합니다.
다음은 내가 수행하려고 시도한 것의 제거 된 버전입니다. 메인 코드에서 함수 호출
void function(const std::function<void()>callback);
:
함수를 선언 나는 그것이 잘 작동 function
내에서 callback
을 실행하면
myClass->function([](){cout << "Callback called";});
을,하지만 난 할 수있는 방법을 찾을 수 없습니다 그것을 구성원 변수 (예 : m_callback
)에 저장하고 같은 클래스의 다른 함수에서 호출하십시오.
람다가 예제와 같이 인라인으로 정의되어 있으면이 기능이 잘 작동합니다 (두 번째 비동기 함수에서도). 그러나 Lambda가 함수에 전달 된 매개 변수이면 thing.Action()은 함수 자체에서만 작동합니다. 비동기 함수에서 EXC_BAD_ACCESS가 발생합니다. –
@AmiramStark : 문제는 오브젝트 수명과 동기화에 대한 불완전한 이해 때문에 거의 보장됩니다. 그러나, 당신이하려고하는 것에 대한 더 대표적인 예가 없으면 "올바른 코드 작성"이외의 조언을하기가 어렵습니다. –