이것은 일관성이없는 것처럼 보입니다. Example :: func 대신에 & Example :: func를 사용하는 이유는 무엇입니까? Example :: func 또는 & exampleFunction을 사용합니까? Example : func을 제외시키기 위해 함수에 대한 참조를 만들 수있는 것처럼 보이지 않습니다. 그리고 나는 example3211이 이미 포인터를 반환하기 때문에 & exampleFunction을 사용하는 방법을 생각하지 않습니다.거기에 & func 또는 class :: func에서 C++을 사용합니까?
#include <iostream>
class Example {
public:
void func() { std::cout <<"print me\n"; }
};
void exampleFunction() { std::cout << "print me too\n"; }
typedef void (Example::*ExampleFunc_t)();
typedef void (*ExampleFunction_t)();
int main()
{
Example e;
ExampleFunc_t f = &Example::func;
ExampleFunction_t f2 = exampleFunction;
(e.*f)();
f2();
return 0;
}
는 ++도 참조 (형식 정의가 작동하는 void (& FuncRef_t)()), 멤버 함수 참조가 아닙니다. – dalle
네, 함수를 암시 적으로 변환하는 것이 유용하다고 생각합니다. 왜냐하면 대부분의 경우 포인터를 전달하기를 원하기 때문입니다 (함수를 전달할 수 없기 때문에 암시 적 변환을 통해 포인터를 전달합니다). 그 이유는 T :: f가 모호 할 수 있기 때문에 충분하지 않다는 것입니다. –
멤버 함수 포인터가 이미 있으면 Base :: f();를 쓸 수 없습니다. 기본 클래스 함수를 호출합니다. (this -> * Base :: f)();를 써야합니다. 어느 정도 빤다. 따라서 & T :: foo를 사용하면 포인터를 얻는 것이 좋은 해결책이라고 생각합니다. –