2012-08-11 3 views
0

나는 간단한 모듈 엔진을 만들려고 노력하고있어,하지만 난 정말, 나는 이런 식으로 뭔가 만들려면 어디서부터 시작 모른다 :간단한 모듈 시스템 (콜백)

int awesomefunction() { 
// do something here 
    execute_awesomefunction_callbacks_here(); 
// some more stuff 
} 

* 표시 execute_awesomefunction_callbacks_here을 (); * 표준에있는 모든 함수를 실행합니다 : :

어떻게 이것을 달성하기위한 아이디어? 아니면 이것을하기위한 더 좋은 방법이 있습니까?

+0

관찰자 디자인 패턴을 사용하여 동일한을 달성 할 수 필요? – Gir

+0

명명법에 웃음. * 어, 내 휴대 전화에서 내 의견을 삭제할 수 없습니다 * – xQuare

답변

3

std::vectorstd::function으로 구현할 수 있습니다. 유일한 제약 조건은 모든 함수 객체가 호환 가능한 반환 유형과 인수 유형을 가져야한다는 것입니다.

class Publisher { 

public: 
    void registerSubscriber(std::function<int(int, double)> callback) { 
    callbacks_.push_back(callback); 
    int executeAwesomeFunction() const { 
    // loop over vector calling each function object. 
    } 
private: 
    std::vector<std::function<double(int,double)>> callbacks_; 
} 

이 C++ 11 지원,하지만 당신은 boost::function

+0

하나는 표준을 상속받을 수 있는지 : 기능? 나는 그것이 typedef만을 포함하고 가상 소멸자도 없기 때문에 no라고 생각했다. –

+0

@StephaneRolland 흠,'std :: function'을 상속받은 것에 대해서는 아무 말도하지 않았습니다. – juanchopanza

+0

내 모든 잘못, 나는 std :: unary_function 및 std :: binary_function C++ 03 오해했다. C++ 11 st :: :: function을 사용하지 않았습니다. –

관련 문제