/*   멤버 함수를 호출해서 사용하는 법.    */
// 함수 오버로딩시 문제점 발생!  아직 미해결 ㅋ

struct stFunc
{
     void Display() {
           // to do
     }
     void Display_text( const char* pszText ) {
           // to do
     }
};

int main( int argc, char* argv[] )
{
    // 인자가 없는 함수와 있는 함수
    boost::signal< void( stFunc* ) > sig01;
    boost::signal< void( stFunc*, const char* ) > sig02;

    // 함수 뒤에 () 빠지는 것을 주의. 함수포인터만 필요함.
    sig01.connect( &stFunc::Display );
    sig02.connect( &stFunc::Display_text );

    stFunc* pFunc = new stFunc;

    sig01( pFunc );
    sig02( pFunc, "출력할 문장" );

    delete pFunc;

    return 0;
}

#include <boost/signal.hpp>

struct stFunc
{
    void operator() () const {
        // to do
    }
};

int main( int argc, char* argv[] )
{
    // boost::signal< 리턴형( parameter1, param2, ... paramN ) > 시그널변수이름;

    // 지금은 함수 자체에 인자가 없으므로 전부 void() 형으로 시그널 형성
    // 구조체( 클래스 ) 자체를 연결.
    boost::signal< void() > sig01;
    sig01.connect( stFunc() );
    sig01();

    // 할당된( 정적 or 동적 ) Object( struct or class )에 연결
    boost::signal< void() > sig02;
    boost::signal< void() > sig03;

    stFunc     Func;
    stFunc*    pFunc;

    sig02.connect( Func );
    sig03.connect( *pFunc );

    sig02();
    sig03();

    delete pFunc;
}