项目作者: Instand

项目描述 :
Easy to use object-oriented "callbacks"
高级语言: C++
项目地址: git://github.com/Instand/signals.git
创建时间: 2016-11-29T12:43:49Z
项目社区:https://github.com/Instand/signals

开源协议:MIT License

下载


Signals

Header only C++17 library provides easy to use object-oriented “callbacks”

Features

  • C++17
  • Header-only
  • Easy to use
  • Connection to functions, methods, lambdas

Glance

  • Create signal

    1. cs::Signal<void(const std::string&)> signal;
  • Connect signal to method

    1. cs::Connector::connect(&signal, &object, &ClassName::method);
  • or to function/lambda

  1. cs::Connector::connect(&signal, [](const std::string& message){
  2. std::cout << message << std::endl;
  3. });
  • Generate signal:

    1. emit signal("Hello, world!");
  • Output

    1. Hello, world!

Example

  1. #include <iostream>
  2. #include <string>
  3. #include <signals/signals.hpp>
  4. using SendMessageSignal = cs::Signal<void(const std::string&)>;
  5. // it's better to define signals at classes (OOP style)
  6. class Foo {
  7. public signals:
  8. SendMessageSignal sendMessage;
  9. };
  10. void onMesageCallback(const std::string& message) {
  11. std::cout << message << "function!\n";
  12. }
  13. struct Functor {
  14. void operator()(const std::string& message) {
  15. std::cout << message << "functor!\n";
  16. }
  17. };
  18. // signals and slots are just an empty macros
  19. class Bar {
  20. public slots:
  21. void onMessage(const std::string& message) {
  22. std::cout << message << "method!\n";
  23. }
  24. };
  25. int main() {
  26. Foo foo;
  27. Bar bar;
  28. // connect any entity
  29. cs::Connector::connect(&foo.sendMessage, &onMesageCallback);
  30. cs::Connector::connect(&foo.sendMessage, Functor{});
  31. cs::Connector::connect(&foo.sendMessage, &bar, &Bar::onMessage);
  32. cs::Connector::connect(&foo.sendMessage, [](const std::string& message) {
  33. std::cout << message << "lambda!\n";
  34. });
  35. // generate signal
  36. emit foo.sendMessage("Hello, world from ");
  37. return 0;
  38. }