如何将事件监听器/信号添加到简单的超人类?

时间:2011-01-08 16:46:16

标签: c++ oop events boost event-handling

我可以并且愿意为此使用boost或std。对不起 - 我是C ++的新手。所以我创建了一个非常简单的程序,如:

#include <iostream>
#include <string>
using namespace std;

class superman
{
public:
  void punch(){cout << "superman: I hit the bad guy!" << endl;};
};

int main()
{
  superman clark;
  clark.punch();
  cin.get();
}

我想添加一个事件列表器,告诉我什么时候克拉克打了一拳,并且像“超人拳打”一样。如何将这样的事件列表器和事件函数添加到我的班级?

1 个答案:

答案 0 :(得分:3)

您可以{/ 3}}使用

你必须声明一个类并重载她的运算符() 在uoi必须在信号上绑定类之后,通过使用connect()方法,最后,使用信号的operator()

struct HelloWorld 
{
  void operator()() const 
  { 
    std::cout << "Hello, World!" << std::endl;
  } 
};

// ...

// Signal with no arguments and a void return value
boost::signal<void ()> sig;

// Connect a HelloWorld slot
HelloWorld hello;
sig.connect(hello);

// Call all of the slots
sig();

用于在插槽中使用参数:

void print_sum(float x, float y)
{
  std::cout << "The sum is " << x+y << std::endl;
}

boost::signal<void (float, float)> sig;

sig.connect(&print_sum);

sig(5, 3);