2012-04-21 2 views
1

를 만들 수 있습니다. 나는이 컨텍스트에 대해 조금 혼란스러워합니다.펑은이 코드가 신호 객체

내가하고 싶은 일은 분명합니다 : 포인터를 객체에 전달하고 멤버 함수 중 하나에 대한 포인터를 전달하여 펑터를 만들어 내 프로그램에 전달합니다.

귀하의 도움과 "정정 사항"에 감사드립니다.

감사합니다.

+2

벤 C가 당신의 질문에 대답,하지만 당신은 [옵저버 패턴] 보길 원하는 것일 수도 : 템플릿 형식 정의의 예를 들어이 스레드에서보세요 wiki/Observer_pattern)에 대한 좋은 접근 방식을 제공합니다. – smocking

+0

@smocking 요점을 고맙게 생각합니다. 이전에 다루었지만,이 경우에는 관찰자 패턴을 목표로 삼았습니다. 코드 이벤트는 여러 이벤트로 전달되는 것이 아니라 "연결"스타일로 전파되어야합니다. 피 호출자. 어쨌든, 대조를 관찰하도록 도와 주셔서 감사합니다. – Haix64

+0

왜 그런 종류의 시그널링이 필요한지 잘 모르겠지만 Observer와 Observable 인터페이스 모두에서 "체인으로 연결된"시그널링 클래스를 상속 받아 패턴을 약간 확장 할 수는 없습니까? – smocking

답변

0

이와 비슷한 작업을하려고하십니까?

#include <string> 
#include <iostream> 

// signal supporter parent 
class signalable 
{ 
public: 
    void foo(std::string s) { std::cout << "hello: " << s << std::endl; } 
}; 


template <class typeT = signalable> 
class trigger 
{ 

    typedef void (typeT::*trig)(std::string); 

    private: 
     typeT* instance; 
     trig fun; 

    public: 
     trigger(typeT* inst, trig function) 
      : instance(inst), fun(function) 
     {} 
     void operator()(std::string param) 
     { 
      (instance->*fun)(param); 
     } 
}; 

int main() 
{ 
    signalable s; 
    trigger<> t(&s, &signalable::foo); 
    t("world"); 
} 

코드에서보다 구체적인 몇 가지 오류에 관해서는, 그들의 대부분은 형식 정의에 관련된 것으로 보인다. C++ 11은 "템플릿 typedef"를 허용하지만, 그렇게 보이지는 않습니다. http://en.wikipedia.org/ (

C++ template typedef

+0

코드가 올바른 것입니다. Ben. 멤버'fun'와 생성자의'typeT :: trig'를'trig'으로 바꾸는 것만으로 해결되었습니다. 고맙습니다. – Haix64