그래, 이미이 예제가 작동 예제로 있지만 그냥 정리하려고합니다.함수 호출 내에서 바인드 사용
현재 콜백 루틴을 포함한 구독 스타일의 이벤트 시스템이 있습니다.
정규 함수와 클래스 멤버 함수를 저장소 변수에 추가해도 아무런 문제가 없습니다.
하지만 id는 내 Event.subscribe 메소드를 오버로드하여이를 정리하고 싶습니다.
template <class T>
class EventObject
{
public:
void subscribe(const T& arg)
{
this->events.push_back(arg);
}
std::vector<T> events;
}
을 그리고 내 주요 년과 같이 사용 :
현재 그렇게 같이 무언가를 내가 클래스 멤버 함수를 사용할 때
void someCallback(const std::string& line)
{
cout <<line;
}
typedef std::function<void(const std::string& line)> onMessageCallbackFunction;
EventObject<onMessageCallbackFunction> messageCallback;
messageCallback.subscribe(someCallback);
지금 피클 앞으로 온다. 나는 본질적으로 함수를 전달하기 전에 바인딩하는 것을 싫어한다. 코드가 더러워 보입니다. 예를 들어
:
class B
{
void callbk(const std::string& line) {}
};
B b;
using std::placeholders::_1;
onMessageCallbackFunction memfunc = std::bind(&B::callbk, b, _1);
messageCallback.subscribe(memfunc);
지금 참으로 그것은 작동하지만, 엉터리 보인다. 문법은 무엇입니까? 그냥 미리 수행 할 수 있습니다.
몇 번 시도해 보았지만 제대로 이해할 수없는 것 같습니다.
은 그렇지 않은 것 :
template <class J>
void subscribe(J::T cls,T& t); //Nope.
void subscribe(J&& cls,T& t); //Nope.
슈퍼 CLOSE : (들으 TOBI)
template< class J, class... Args >
void subscribe(void(J::*funct)(Args), J& inst) {
using std::placeholders::_1;
subscribe(std::bind(funct, inst, _1));
}
이제 단지 일반에 인수 목록이 필요합니다. 구문이 무엇인지
확실하지,하지만 내가 생각 바인딩보다 람다를 선호합니다 – user463035818
std :: thread ctor (3)에서 어떻게 구현되는지 확인할 수 있습니다 - http://en.cppreference.com/w/cpp/thread/thread/thread - 사소한 것이 아니므로 'std :: function'을 더 잘 사용하십시오 – Slava
@Slava 그래서 어떻게 할 건가요? –