异构类型的回调

时间:2019-05-15 00:57:17

标签: c++ callback

正在接收IP(TCP)流量,必须首先解析标头“ ID”以确定特定消息(以下示例)。需要一个回调解决方案,该解决方案将为下面的(异构)消息调用Process函数。注意:消息不是从通用基类派生的,并且消息是在供应商文件中定义的,因此我坚持使用它们。

我想到了两个选择。一种使用变体但给出28条消息的方法似乎不可行。替代方法是我在下面尝试的方法。打开其他选项

#include <iostream>
#include <unordered_map>

struct Header { unsigned int ID ; };
struct FooMessageFormat {};  //ID = 314
struct BarMessageFormat {};  //ID = 315
struct BazMessageFormat {};  //ID = 316
//etc .. (25 additional messages)

struct MessageProcessor
{
    void Process( FooMessageFormat& )  { std::cout << " * FooMessageFormat " << std::endl; }
    void Process( BarMessageFormat& )  { std::cout << " * BarMessageFormat " << std::endl; }
    void Process( BazMessageFormat& )  { std::cout << " * BazMessageFormat " << std::endl; }
};

template <typename... Args>
struct GenericFunc
{
    //GenericFunc(int, std::function<void(Args...)> f)
    //: _f{ f } {}
    //  std::function<void(Args...)> _f;
    GenericFunc(int, std::function<void(Args...)> f) {}
    std::unordered_multimap < int, std::function<void(Args...)> > receive_handler  ;
};

auto main()-> int
{
}

0 个答案:

没有答案