Компонентный дизайн C ++? - PullRequest
1 голос
/ 30 марта 2012

Я пытаюсь работать с компонентной моделью.По сути, я хочу иметь объект, к которому я могу прикрепить другие объекты, а затем через корневой объект получить доступ ко всем функциям в дочерних объектах.Например: если у меня есть объект с именем Calculator, а затем у меня есть еще 2 с именами Add и Subtract, я хочу иметь возможность просто прикрепить объекты Add и Subtract к объекту Calculator и затем сделать что-то вроде Calculator.add (), который на самом деле вызывает Calculator.Add.add ();

Я слышал, что обратные вызовы, использующие функторы, являются подходящим способом.Это правда?Если да, есть ли способ получить список всех текущих доступных функторов на объекте?

Я искал работу с настройкой, подобной этой:

#include <callback.h>   //include the callback library header
#include <iostream.h>

class Button{
public:
Button(const Functor0 &uponClickDoThis)
    :notify(uponClickDoThis)
    {}
void click()
    {
    notify();   //a call to operator()
}
    private:
    Functor0 notify;    //note - held by value
    };

    //Some application stuff we'd like to connect to Button:


    class CDPlayer{ 
    public:
       void play(){cout<<"Playing"<<endl;}
       void stop(){cout<<"Stopped"<<endl;}
    };

    void wow()
       {cout<<"Wow!"<<endl;}

    void main()
{
CDPlayer cd;

//makeFunctor from object and ptr-to-member-function

Button playButton(makeFunctor(cd,&CDPlayer::play));
Button stopButton(makeFunctor(cd,&CDPlayer::stop));

//makeFunctor from pointer-to-function

Button wowButton(makeFunctor(&wow));

playButton.click(); //calls cd.play()
stopButton.click(); //calls cd.stop()
wowButton.click();  //calls wow()
}
...