죄송합니다. 이전에이 질문을 받았지만 찾을 수 없었습니다.함수 포인터 대신 값 (?)을 전달합니까?
그래서 저는 템플릿과 새로운 C++ 11 기능 (주로 람다, 항상 다른 언어로 좋아하는 것)에 대해 직접 교육하려고합니다.
는하지만 내 테스트에서 나는이 일을 몰랐다 뭔가오고, 나는 그것이하지만 캔트 그림 그것을 밖으로 ..
다음 코드 작동 방식을 이해하기 위해 노력하고있어 :
template <class Func>
void Test(Func callback) {
callback(3);
}
void Callback(int i) {
std::cout << i << std::endl;
}
int main(int argc, char** argv) {
Test(&Callback); // this I was expecting to work, compiler will see its a pointer to a function
Test(Callback); // this also works, but how?!
return 0;
}
템플릿이 어떻게 작동 하는지를 이해한다면 기본적으로 컴파일러는 무엇을 빌드해야하는지 알기 때문에 첫 번째 호출은 Test(&Callback);
입니다. 컴파일러가 템플릿이 함수 주소를 받고 인자가 있어야한다고 생각하기 때문에 작동 할 것으로 예상됩니다. 포인터.
하지만 두 번째 호출은 무엇입니까? 그것을 가정하는 템플릿은 무엇입니까? functio의 복사본 (심지어 의미가있는 경우)?
답을 고맙습니다. 그래서 만약 내가 템플릿을 사용하지 않으면 Test : void Test (void (* callback) (int)) {...} 두 호출 모두 잘 동작 할 것이다. 알고있는 것이 좋다. 내가 연결된 스레드를 읽었는지 확인하십시오. – sap