인프런 커뮤니티 질문&답변
BindEvent 관련 질문 드립니다.
해결된 질문
작성
·
353
0
제가 BindEvent 함수를 이용중에 있는데, Get을 통해서 오브젝트를 가져오고 있습니다,
문제는 enum값을 따로 써주면서 BindEvent를 하면 잘 되는데, enum이 너무 많아 반복문을 써서 Event를 등록하면 잘 안돼는 현상이 발생하는데, 원인을 잘 모르겠습니다.
심지어 반복문에 i <8 이라고 써서 i가 총 7까지만 되도록 했음에도 불구하고, 저 오브젝트를 눌렀을 때 ClickStuffIcon(int) 에 8이 매게변수로 들어가고 있습니다.. 원인을 계속 찾아보고자 디버그를 했는데, 찾지 못해 질문드립니다..ㅠㅠ
답변 1
0
느낌이 딱 람다 캡처 관련 문제 같은데요.
for (int i = 0; i < 8; i++)
{
int temp = i;
BindEvent(... ClickStuffIcon(temp); });
}
요렇게 한 번 수정해서 테스트 바랍니다.
그래도 해결이 안 되면 전체 프로젝트 압축해서 rookiss@naver.com 로 보내주시기 바랍니다.
람다 캡처는 람다에서 우리가 외부에서 내부로
찰칵 찍어서 넘겨준 애를 말하는데요.
가령 () => { ClickStuffIcon(i); } 에서 i라는 값은
외부에서 우리가 람다 안으로 캡처해서 넣어준 것입니다.
다만 넘겨준 값이 직관적이지 않을 때가 많은데
위의 문제 상황에서는 i라는 값을 '실시간'으로 복사해서 넘겨주지 않고,
일종의 i의 '참조값'이 전달되어, 결과적으로 모든 애들이 같은 최종값을 보게 됩니다.
람다 캡처 동작 방식이 설명으로 하기엔 조금 복잡한데
잘 요약된 아래 링크를 읽어보시기 바랍니다.
https://www.sysnet.pe.kr/2/0/10817






헉..너무 잘됩니다.. 빠른 답변 감사합니다. 혹시 실례가 되지 않는다면 람다 캡처 관련 문제가 어떤건지 알려주실 수 있을까요? 인터넷 검색해보니 내용이 복잡해보여서 만약 요악이 불가능한 내용이라면 스스로 차근차근 알아볼 수 있도록 하겠습니다. 정말 다시한번 빠른 답변 감사합니다.. 1시간동안 알아보다 못찾아서 질문했습니다..ㅠㅠ