如何为任意类型的任意数量的参数创建函数或宏
How to make function or macros for any count of arguments with any types?
有客户端和服务器。我使用boost::serialization
发送和接收数据。通常发送几个不同类型的参数。是否有方法可以为此制作函数或宏?
例如send(argType1, argType2, argType3);
我想我不会一次发送超过5个参数。
这是我的版本
template<class T>
int sendData(SSL *ssl, int command, T t)
{
std::string serialData;
OByteStream obs(serialData);
obs << command;
obs << t;
obs.flush();
return SSL_write(ssl, &serialData[0], BUF_SIZE);
}
template<class T1, class T2>
int sendData(SSL *ssl, int command, T1 t1, T2 t2)
{
std::string serialData;
OByteStream obs(serialData);
obs << command;
obs << t1;
obs << t2;
obs.flush();
return SSL_write(ssl, &serialData[0], BUF_SIZE);
}
template<class T1, class T2, class T3>
int sendData(SSL *ssl, int command, T1 t1, T2 t2, T3 t3)
{
std::string serialData;
OByteStream obs(serialData);
obs << command;
obs << t1;
obs << t2;
obs << t3;
obs.flush();
return SSL_write(ssl, &serialData[0], BUF_SIZE);
}
...
如果您阅读了教程,您将发现大多数序列化器背后的思想是,在任何地方描述应用程序定义的类型和对象。这是用于boost的,比如:
class xyz
{
int a;
std::string b;
std::vector<int> c;
...
Serialization_Method(serializer_type &ser)
{
ser & a;
ser & b;
ser & c;
}
}
这就结束了你可以序列化你的类型的可能性:
ser & xyz_obj;
如果你可以用你的序列化方法定义你的对象,你可以间接地发送/接收你需要的所有数据。描述总是在其中一个序列化方法中完成。
你发送没有任何描述的"任何东西"的想法永远不会奏效,也永远不会奏效。这很简单,因为你的接收者必须知道该把数据放在哪里。如果你认为接收方有一个程序片段,而我们认为我们可以接收到"一些东西"。我们应该如何处理这类数据?您的代码必须至少了解由您的代码和共同赞助数据表示的类和对象。如果您收到"一些未定义的"数据,则无法处理此数据!这结束于双方的数据和序列化结构的定义。对于boost,只需使用serializer_obj & serializer_data;
语句即可完成。
相关文章:
- 在函数中使用 const int size 参数创建数组会在 Visual Studio 中抛出错误 C++:表达式的计
- 如何使用可选的随机种子参数创建 roll_die() 函数
- 基于参数创建数组
- 从可变参数创建枚举?
- 如何从可变参数模板参数创建 std::tuple<>?
- 在 C++ 中按参数创建不同类型的对象?
- 根据参数创建派生类的新实例
- 基于模板参数创建多个类实现
- C++ 从模板参数创建元组向量
- 从从可调用参数创建的线程对象参数移动构造 C++11 线程
- 在构造函数中使用参数创建一个类数组
- 是否可以使用C 函数中的const int参数创建数组
- 如何使用不同对象的模板容器作为参数创建模板类
- C++:基于积分模板参数创建可变长度元组
- 使用按插入方式排序的参数创建哈希映射
- 避免为非默认参数创建临时变量?
- 是否可以根据参数创建返回对旧项目的引用的构造函数
- 使用整数模板参数创建编译时双精度
- C++ 使用数组作为参数创建泛型函数
- 基于参数创建基类中的派生类