이 질문을하기 전에 많은 링크를 살펴본 결과 std :: function, std : bind 및 C++의 콜백을 꽤 많이 읽었습니다. 이해할 수 있듯이이 개념은 특정 이벤트가 발생한 후에 이벤트 핸들러가 청취자에게 알리는 것입니다. 필자는이 스타일의 프로그래밍을 처음 시작할 때 라이브러리 경계에 걸쳐 적용될 때 올바른 구현을 찾기 위해 애를 먹고 있습니다. 나는 도서관을C++ std :: function 메서드 노출없이 라이브러리간에 콜백 바인딩
을 특정 데이터를 수용하고 일부 처리를 수행하는 클래스에서 개인 기능이있는 A :
는 여기가 구현해야하는 상황이나 디자인입니다. 라이브러리 A의 함수가 필요로하는 것과 동일한 데이터를 제공하는 libraryB가 있지만, libraryB는 std :: 함수를 노출하여 해당 데이터를받습니다. 다른 라이브러리는 데이터를 받기 위해 함수를 콜백에 바인딩해야합니다. 그래서 libraryA의 func
을 내 Application 클래스의 libraryB의 std :: function에 바인딩해야합니다.
Inside libraryA {
Class A {
private:
AA objAA;
}
Class AA {
private:
void func(int x) {
//this is the function I want to tie to calback in library libB without exposing the method api
//How can I expose a public api to return the address of this function so that the app can bind it to libraryB's callback ?
}
}
}
Inside libraryB {
Class B {
public:
void registerCallback(std::function<void (int)> callmePls) {
m_callback = callmePls;
}
private:
typedef std::function<void (int)> theCallback;
theCallback m_callback;
}
}
Inside my Application which uses both libraryA & libraryB {
//How can I bind/assign “func” in libraryA to the callback in libraryB ?
}
I 앱이 libraryB의 콜백에 바인딩 할 수 있도록 관심이 함수의 주소를 반환 libraryA에서 공개 API를 노출 할 수 있습니다 어떻게
? libraryA의 "func"를 libraryB의 콜백에 바인딩하거나 할당하려면 어떻게해야합니까? (안 헤더)를 .cpp
파일에 구현 된 기관과
생생한 대답에 감사드립니다. 두 번째 솔루션에서는 libraryA의 std :: function을 가져와 라이브러리 B의 콜백에 할당해야합니다. –
@NelsonP 예, 클래스 A 인터페이스에 추가했습니다. – Yakk