jt2*_*234 5 c++ boost function-pointers boost-asio c++11
我正在寻找一种通过字符串输入调用不同函数的方法。
我有一个映射,它将每个唯一的字符串与一个函数指针联系起来,还有一个查找函数来搜索映射并在找到时返回一个指针。
现在的技巧是,我需要一种方法来存储和返回指向至少具有不同返回类型的函数的指针,如果可能的话,还具有不同的签名。
用法是:
从网络套接字获取字符串输入 -> 查找并执行找到的函数 -> 将结果直接推回到要序列化和发送的套接字中,而不关心实际发生了什么。
这可行吗?如果没有,我们将如何完成这项任务?
这可以通过一些样板代码以不同的方式来完成。如果签名的数量足够小,您可以保存多个函数指针向量(每个函数类型一个),然后保存一个映射,该映射将函数名称与类型标识符(用于选择向量)以及向量内的位置进行映射。
第二个选项是存储 a boost::variant(同样,如果签名集很小)。您需要提供一个访问者对象来评估函数(对于存储的每个函数类型)并产生结果。类型由boost::variant类型管理,因此不需要将类型标记存储在映射中。
您还可以使用完全类型擦除并在映射中存储确定要调用的函数类型的标记和boost::any存储函数指针的对象。您可以使用类型信息来检索指针并执行函数,但您必须手动处理switch基于函数类型的信息。
另一方面,最简单的方法是编写具有固定接口的适配器。然后只需将指向适配器的指针存储在映射中即可。