Как получить слот для привязки функции к сигналу?

Я использую сигналы2. Я пытаюсь настроить отношение viewstate / view с представлением, имеющим подписанный слот. Я не могу вызвать функцию обработчика, хотя. Что-то не так с привязкой? Я новичок в C ++, так что, возможно, есть неправильное использование const / reference / dereferencer.

В моей машине состояния:

void State::setAppState( State::AppState pNewState )
{
mCurrentState = pNewState;
// this prints fine
ci::app::console() <<"\nState::setState " << pNewState << "\n";
(*mSignal)();
}

На мой взгляд базовый класс:

BaseView::BaseView( State& pState ): mState(pState)
{
// register connection to state
mConnection = mState.connect(boost::bind(&BaseView::stateChange, this));
}

// the use of const is right from their example in the doc.
// but i found i had to const_cast to get it to compile
// can i get rid of the 'this' and do it without const method?
// edit: no (boost compile errors)
void BaseView::stateChange()  const
{
int s = const_cast<State&>(mState).getAppState();
// this does not print
ci::app::console() << "\n>>>>> View Slot registered change " << s << "\n" ;
}

На мой взгляд, подкласс:

AttractView::AttractView(State pState):BaseView(pState)
{
// to pass the constructor param
}

Основное приложение:

mAttract = AttractView( mStateMachine );
mStateMachine.setAppState(State::AppState::Attract); //AppState is just an enum

0

Решение

Я думаю, что проблема была на самом деле со списком инициализатора.

Хотя pState был допустимым в конструкторе BasiView, он не связывался должным образом или был привязан до инициализации сигналов и удаления привязки.

 BaseView::BaseView( State& pState ): mState(pState)

Добавление дополнительной функции init / create очищает это.

void BaseView::init(State& pState){
mConnection = mState.connect( (boost::bind(&BaseView::stateChange, this)) );
}

mAttract.init( mStateMachine );
mStateMachine.setAppState(State::AppState::Attract);
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector