Существует ли какой-либо набор инструментов C++ GUI для определения функций обратного вызова в виде лямбда-выражений C++ 11? Я считаю, что это уникальный способ использования C# (по крайней мере, по сравнению с C++) для написания программ на основе графического интерфейса. Какую подпись типа следует использовать для функций, принимающих лямбда-выражения в качестве аргументов, и как они поддерживают неявные преобразования?C++ 11 Лямбда-выражения в качестве функций обратного вызова
ответ
ли какие-либо C++ GUI инструментарий вне там определения поддержки обратного вызова функций, как C++ 11 лямбда-выражения?
Если они принимают указатели на функции, то вы можете хотя бы использовать лямбды, которые ничего не захватывают. Такие лямбды могут быть автоматически преобразованы в указатели на функции.
Какую подпись типа следует использовать для функций, принимающих лямбда-выражения в качестве аргументов и как они поддерживают неявные преобразования?
Если вы хотите, чтобы люди использовать лямбды или любой вызываемый объект, то вы можете либо иметь свой API принимать объекты станд :: функции, или использовать шаблон:
template<typename Callback>
void do_it(Callback c) {
c();
}
do_it([&]{ c = a+b; });
шаблон позволит лямбда в быть встроенным, тогда как std :: function требует косвенности. Это может не иметь особого значения для обратных вызовов GUI.
Любые причины использования орграфов здесь? Кажется излишне запутанным. – juanchopanza
, пожалуйста, избегайте орграфов – dats
Ответ на вторую часть вопроса: вы можете использовать std::function<Signature>
, где Signature
= например. void (int)
или - если лямбды не принимают закрытий - старый добрый метод void (Foo*)(int)
, поскольку лямбда без крышки должна быть конвертирована в соответствующий тип функции. Так, например, вызов метода с подписью:
void AddHandler(std::function<void (int)> const &);
может выглядеть следующим образом:
myObject.AddHandler([&](int _) {
// do something and access captured variables by reference
});
Существует новый набор инструментов GUI, который соответствует вашим требованиям. Он пытается предоставить множество функций для повышения эффективности разработки.
Введение в библиотеку. http://nanaproject.wordpress.com/2011/12/16/preliminary-study-of-nana-c-library/
Статья, поясняющая, как уменьшить сложность с помощью библиотеки и std :: bind. http://nanaproject.wordpress.com/2012/01/31/idioms-and-insights-for-a-good-design/
Удачи!
- 1. Определение функции-члена в качестве обратного вызова в C++ 11
- 2. C++ Несколько функций обратного вызова
- 3. Как избежать повторения функций обратного вызова (C++)
- 4. Реализация функций обратного вызова в C
- 5. Сохранение функций обратного вызова Lua
- 6. Обработка функций обратного вызова
- 7. оптимальный способ передачи нескольких функций обратного вызова в качестве аргументов?
- 8. JavaScript: передача встроенных объектов в качестве функций обратного вызова
- 9. Выполнение функций обратного вызова Javascript
- 10. вызова других функций от функции обратного вызова
- 11. лучшее понимание функций обратного вызова в javascript
- 12. Псевдоним шаблона C++ 11 для обратного вызова метода
- 13. Выполнение функций обратного вызова async в nodejs
- 14. Передать параметр строки функции обратного вызова в C++ 11
- 15. Уменьшить массив функций обратного вызова до одного обратного вызова
- 16. Использовать шаблон шаблона в качестве обратного вызова в C++
- 17. Использование $ .Deferred() в качестве обратного вызова
- 18. Доступность функций C++ 11
- 19. Переменная область для функций обратного вызова PHP
- 20. C++ функция 11 лямбды в качестве обратного вызова и по умолчанию значения
- 21. Использование NSS для вызова функций pkcs # 11
- 22. Добавление дополнительных функций обратного вызова в getCurrentPosition()
- 23. Компиляция с помощью указателей функций обратного вызова в Visual C++
- 24. C++ 11 альтернатива анонимному классу обратного вызова Java
- 25. Использование производного класса в качестве функции обратного вызова в C++
- 26. Форматирование возвращаемых значений из функций обратного вызова
- 27. Использование функции-члена в качестве обратного вызова
- 28. Использование метода класса C++ в качестве функции обратного вызова
- 29. Как использовать метод класса C++ в качестве функции обратного вызова
- 30. Передача ссылки метода python на C в качестве обратного вызова
Посмотрите на библиотеку _any_ сигналов/слотов, такую как [это] (http://www.boost.org/libs/signals2/) или [это] (http://www.boost.org/ libs/signals /), или [это] (http://www.chaoticmind.net/~hcb/projects/libtscb/). Этот шаблон полностью ортогонален GUI, но графические интерфейсы - это место, где обычно используется шаблон. – ildjarn