Во-первых, попробуйте повышением:: сигнал так или иначе. Не предполагайте, что это не будет достаточно быстро, пока Вы не попробуете в своем конкретном случае, который является Вашим приложением
, Если это не будет достаточно эффективно, возможно, что-то как , то FastDelegate удовлетворит Вашим потребностям? (я did'nt пробуют его, но слышали, что это было хорошее решение в некоторых случаях где повышение:: сигнал, кажется, не подходит).
Так или иначе, если в Вашем приложении используют сигнал каждый кадр, может стоить для замены сигнальной системы чем-то более простым, как контейнер, которые содержат объекты/функторы, которые назовут каждым кадром. Сигнал более сделан позволить непосредственное управление "событиями", чем сделать цикл цикла динамичным (позволяющий изменение функций названный каждым кадром). (Я имею мое собственное решение (ОБНОВЛЕНИЕ: это очень старо и архаично теперь), что я в большой степени использую в игре, и например у меня нет проблемы с производительностью, поэтому возможно, что-то подобное могло помочь).
Я использовал libsigc ++ прежде, и это было довольно просто. Я не думаю, что это имело бы много в способе потерь производительности, и действительно я учился любить использовать слоты вместо указателей функции в нескольких местах.
Одна вещь знать состояла в том, что по состоянию на прошлый раз я использовал его (2 + несколько лет назад), это было ограничено макс. из шести параметров, передаваемых посредством соединений.
у меня нет опыта с библиотекой повышения, таким образом, я не могу помочь Вам там.
Очень, очень быстрая библиотека событий на формах Gamedev.net
При профилировании некоторого кода я работал недавно, я был удивлен и встревожился, увидев boost :: сигналы функции, плавающие наверху. За те из вас, кто не знает, boost :: signal - замечательно полезный библиотека сигналов / слотов, которые можно использовать наряду с boost :: bind для обработка событий на основе делегатов, например можно увидеть в C #. Он крепкий, функциональный и гибкий. Это также, Я научился невероятно ужасающе медленно. Для многих людей кто использует boost :: сигналы, это нормально потому что они очень редко называют события. Я звонил по несколько событий за кадр на объект, с предсказуемыми результатами.
Итак, я написал свой собственный. Немного меньше гибкий и функциональный. Это оптимизирован под то, как все стремятся фактически использовать события. И событие призыв от пятнадцати до восьмидесяти раз быстрее, чем boost :: signal.
см. ссылку
Те двое, что вы перечислили, - единственные, о которых я знаю. Все, что я видел, показывает, что libsigc ++ демонстрирует максимальную производительность. Как вы видели в сравнении, есть некоторые случаи, когда синтаксис boost немного красивее, но совсем немного.
Я лично использовал libsigc ++ и доволен этим. Libsigc ++, похоже, используется гораздо большим количеством проектов. Беглый взгляд в моем диспетчере пакетов показывает более 100 проектов, зависящих от libsigc ++ 2. На мой взгляд, одного этого достаточно, чтобы склонить чашу весов, особенно с учетом преимущества в производительности и отсутствия других существенных отличий.
Я говорю libsigc ++ 2.
Я не использовал libsig++, но читал об этом. Мой предыдущий опыт работы с сигналами и слотами - из Qt и немного из Boost. Если у вас нет ни одного из них, вы можете попробовать мою собственную библиотеку сигналов и слотов (ksignals), которая существует как для встроенного кода (без динамического выделения памяти), так и для "нормального" c++ кода (динамическое выделение памяти при подключении).
Вы можете найти её по адресу : www.kjellkod.cc/signalandslots
На странице вы также можете найти сравнение: KSignals Vs Boost сигналы.
Скорость vise ksignals очень быстрая и очень легкий код. Он должен быть очень прост в использовании, понятен и при необходимости модифицирован.
Удачи Справки Kjell H
Еще одна реализация sig-слота, которую следует рассмотреть:
http://code.google.com/p/ting/wiki/SignalSlotUsage
Она не претендует на звание лучшей, но все же другая тот, который имеет право на существование.