У меня проблема. Я пытаюсь encapsulatie boost :: signal и boost :: bind в свой собственный класс Event.Encapsulating boost :: signal and boost :: bind
class MyEvent
{
private:
boost::signal<void()> Sig;
public:
void Subscribe(.........)
{
Sig.connect(boost:bind(.........);
}
void Raise()
{
Sig();
}
};
меня пытаюсь передать указатель на функцию в подписи функции ПОДПИСАТЬСЯ и визуальную студию просто дает мне тона ошибок. Я не знаю, как написать подпись Subscribe и Что передать в boost :: bind, в идеале у меня будет boost::bind(&MyClass::MyHandler, &MyClassObject)
в функции Подписки и вызовет его наружу, как MyEventObject.Subscribe(&MyClass::MyHandler, &MyClass)
. Могут ли люди помочь мне заполнить эти две пробелы?
Спасибо, Игорь. Мой босс попросил меня инкапсулировать его, чтобы во избежание повышения lib повсюду. Я действительно хочу разоблачить его, поскольку он более гибкий, чтобы использовать boost :: signal – cynric4sure
@ cynric4sure. Вы имеете в виду, что вам необходимо устранить усиление от интерфейсов? Затем обратите внимание на следующие моменты: 1) ваш класс по-прежнему предоставляет «boost :: сигналы» в своем определении (хотя это «частный»), и, следовательно, код пользователя будет зависеть от заголовков форвардов. Вы можете скрыть его с помощью pImpl; 2) Вам не нужно ограничивать пользователя указателем на функцию-член! Вместо этого принимайте любые вызываемые и позволяйте пользователю создавать его с помощью 'std :: bind' или того, что он хочет. –