Как добиться QT-подобного синтаксиса сигнальных соединений с Boost :: Signal

В QT мы можем соединять сигналы и слоты, используя следующий простой синтаксис:

connect(pObject1, signal1, pObject2, slot2)

Например, можно написать что-то вроде:

A a;
B b;    
connect(&a, SIGNAL(valueChanged(int)), &a, SLOT(setValue(int)));

С Boost :: Signal синтаксис мы бы написали так:

A a;
B b;    
a.valueChanged.connect(boost::bind(&B::SetValue, &b, _1))

ИМХО, синтаксис сигнала буста более сложный. Есть ли способ сделать синтаксис Boost :: Signal более похожим на QT.

4 голоса | спросил Lev 17 FebruaryEurope/MoscowbWed, 17 Feb 2010 12:46:37 +0300000000pmWed, 17 Feb 2010 12:46:37 +030010 2010, 12:46:37

1 ответ


0

Что касается Qt, то во время компиляции он проходит этап генерации кода, чего не может сделать Boost. Это означает, что Qt может делать очень умные синтаксические вещи, которые нельзя скопировать без прохождения аналогичного процесса.

Цитировать Википедию :

  

Этот инструмент, известный как moc, запускается из исходников программы Qt. Он интерпретирует определенные макросы из кода C ++ как аннотации и использует их для генерации дополнительного кода C ++ с «метаинформацией» о классах, используемых в программе. Эта метаинформация используется Qt для предоставления функций программирования, недоступных изначально в C ++: система сигналов /слотов, самоанализ и вызовы асинхронных функций.

(я не могу заставить ссылку работать, но она http://en.wikipedia.org/wiki/Qt_(framework))

Edit: . Я думаю, что цитата из Википедии совершенно ясна, что система сигнал /слот реализована с использованием moc. Я очень сомневаюсь, что есть какой-либо способ использовать тот же синтаксис без использования подобной системы.

ответил Skilldrick 17 FebruaryEurope/MoscowbWed, 17 Feb 2010 12:50:15 +0300000000pmWed, 17 Feb 2010 12:50:15 +030010 2010, 12:50:15

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132