正在接收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
{
}