현재 Unreal 엔진의 C++ 프로젝트에서 작업 중이므로이 문제를 해결할 수 없습니다. void (myClass :: *)()를 void (*)()로 변환하는 방법
class A
{
public:
void (* array[10])();
//Add Function to an array
void AddFunctionToArray(void(*function)());
};
class B
{
public:
A a;
//Sending a B function to A
void SendMyFunction();
void Foo();
};
void B::SendMyFunction()
{
a.AddFunctionToArray(&B::Foo);
}
나는 오류를 얻을 :
can't convert void (B::*)() to void (*)()
이 어떻게 다른 내 클래스 중 하나에서 함수 포인터를 보낼 수
?
아마도 C 스타일 배열 대신에'std :: vector'를 사용하고 싶을 것입니다. – tadman
'B :: Foo'는'B'가 실행되어야합니다. Unreal Engine에는'B'가 없으므로 호출 할 수 없습니다. 'B :: Foo'를'static'으로 만들거나'B'가 아닌 다른 자유 함수로 만들면'B'가 필요 없습니다. – nwp
Unreal API가 콜백으로 다시 전달되는 "클로저"값을 제공하면 (예 : C API의 경우 'void * data'와 같은 것입니다),'B * '및 a를 포함하는 작은 구조체에 포인터를 전달할 수 있습니다 '(B :: *)()'를 호출 한 다음, 콜백 함수를 'void * data' 클로저 포인터를 구조체에 캐스트 한 후 적절한 함수를 호출하는 래퍼 함수로 만듭니다. (간단히 말하면, 그것들을 람다 객체에 묶고,'std :: function' 객체에 집어 넣은 다음 콜백에'void * data'를'std :: function' 유형으로 캐스팅하고 호출하십시오.) –