将成员函数作为多个类的参数
Take member functions as parameters from multiple classes
我正在开发一个输入系统。在这个系统中,当按下某个键时,对象可以注册要调用的函数。然而,注册的方法是该对象的成员,所以我的注册函数必须看起来像这样:
void寄存器(EventType类型,Class*对象,void(Class::*函数)()){//保存这个}
问题是,它不会总是同一个类注册一个函数,所以这不起作用。这周围有没有?
您可以将std::function<void()>
存储在注册回调的类中,然后添加一个函数模板register
成员函数:
struct Foo
{
template <typename F>
void register(EventType type, F&& fun)
{
// make an std::function<void()> from fun and store
}
};
然后,在调用方一侧绑定Class
实例和Class
成员函数。
struct Bar { void bar() {} };
void foobar() { std::cout << "foobar!n"; }
Foo f;
Bar b;
f.register(event1, std::bind(&Bar::bar, b)); // will call b.bar()
f.register(event2, foobar); // will call foobar()
这是一种不用模板和函数指针的方法。您有一个观察者(回调)类,如下所示:
class MyCallback {
public:
virtual void run(int abc)
{
cout << "MyCallback::run(" << abc << ")" << endl;
}
};
然后用父类MyCallback:实例化观察者类
class Test : public MyCallback
{
public:
void run(int abc)
{
MyCallback::run(abc);
}
};
调用所有观察者的类:
class Subject
{
vector<MyCallback*> observers;
public:
void reg_observer(MyCallback* cb)
{
observers.push_back(cb);
}
void call_out(int abc)
{
vector<MyCallback*>::iterator it;
for(it=observers.begin();it!=observers.end();it++)
{
(*it)->run(abc);
}
}
};
测试代码:
void testcb()
{
Test ttt;
Subject s;
s.reg_observer(&ttt);
s.call_out(123);
}
相关文章:
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 使用指向成员的指针将成员函数作为参数传递
- 如何将lambda作为模板类的成员函数参数
- 将成员函数指针作为参数传递给模板方法
- c++构造函数成员初始化:传递参数
- 使用带有 ref 参数的成员函数创建线程时出现编译错误
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 模板化检查是否存在带有参数列表的类成员函数?
- 如何将类成员方法的参数列表自动填充写入可变参数?
- 为什么我需要在成员发起器列表中重复基类的模板参数?
- C++向量默认为成员参数
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- 可变参数模板参数扩展 类型为 std::function 的类成员
- 绑定到可变参数成员函数
- C/C++ 包含点的宏参数(成员访问运算符)
- 将const char * const参数成员分配给新值
- 基于模板参数成员函数参数的模板专用化
- 如何访问可变参数成员
- 可变类参数成员变量的异构存储
- 非模板类中的可变参数成员