MGZ*_*ero 3 c++ function c++11
假设我有以下课程......
class foo
{
private:
void bar(int, int);
void bar2(int, float);
void bar3();
void callOne(int message);
};
Run Code Online (Sandbox Code Playgroud)
假设我想callOne()根据message参数的值调用其中一个函数.说0个电话bar(),1个电话bar1()和2个电话bar2().我知道这里的简单方法是使用a switch,但在实际实现中我觉得这可能会变得混乱,因为我将有更多的功能.这基本上是我的后备实现.
有没有一种方法使用函数指针,lamdbas等,可以说,"嘿,我给你这个消息.基于该消息调用特定的功能."?我基本上正在寻找一种基于消息查找函数(可能是字典)并调用它的方法.
唯一的方法是使用某种存储函数的数据结构(可能是a std::function),它将消息名称映射到已注册的函数.无论是std::map,std::unordered_map,boost::container::flat_map或者地图上自己设计的,它会必须是类似的东西.
至于签名问题,您可以简单地使用固定(小)数量的签名.在内部,您可以存储不同的地图,只需搜索每种类型的相应功能.或者,您可以让地图存储boost::variant各种参数类型的功能,使用访问者根据需要将呼叫置于正确的类型.
如果你需要支持调用任何带有任意数量参数的函数,那通常是不可能的.至少,不是直接的.对于消息处理系统,我通常更喜欢使用boost::any.所有消息功能都采用any,发送消息的人提供消息.发送者和接收者知道的参数应该是,这样的接收器可以做一个适当的any_cast将其转换为正确的类型.如果存在误传,你会得到一个很好的例外.
| 归档时间: |
|
| 查看次数: |
171 次 |
| 最近记录: |