std :: function 개체를 사용하여 C 스타일의 함수 포인터를 피하려고했지만 상속하는 동안 멤버 함수를 호출하는 데 문제가 있습니다.std :: function parameter subclass
나는 표준 : 기능 수신하는 방법이 있습니다 지금
class A
{
public:
void testCallbackA();
// this is unrelated, but I need some features from the superclass
void goingToNeedThisWhenCallingTestCallbackA(int someParams);
};
void method(std::function<void(A*)> callback);
method(&A::testCallbackA); // this works fine
좋은 모두,하지만 방법이있는 서브 클래스를 사용할 때 함수 포인터를 캐스팅해야합니다
class B : public A
{
public:
void testCallbackB() { }
};
method(&B::testCallbackB); // this fails
std::function<void(A*)> call = &B::testCallbackB; // this fails
std::function<void(B*)> call = &B::testCallbackB; // this works
을
나는 메소드를 호출 할 수있게하려면 (& B : testCallbackB) 나는 함수 포인터를 해당 형식 정의하고 그것을 이런 식으로 캐스팅해야합니다
typedef void (A::*Callback)();
std::function<void(A*)> call = (Callback)&B::testCallbackB; // this works
이 typedef를 피할 수 있습니까? 캐스트를 피할 수 있습니까? 나는 행운을 빌어 std :: bind를 조사해 보았다.
아이디어가 있으십니까? 그것은 나쁜 생각 때문에
굉장! 조금 더 설명해 주시겠습니까? 더 많은 매개 변수를 사용하여이 작업을 수행 할 수 있지만 메서드 외부에서 설정하지 마십시오. –