C++ 如何为任何类型的参数计数生成函数或宏?

C++ 如何为任何类型的参数计数生成函数或宏?,c++,c++11,macros,C++,C++11,Macros,有客户端和服务器。我使用boost::serialization发送和接收数据。通常会发送多个不同类型的参数。有没有办法制作函数或宏 例如send(argType1、argType2、argType3) 我想我不会一次发送超过5个参数 - 这是我的版本 template<class T> int sendData(SSL *ssl, int command, T t) { std::string serialData; OByteStream obs(serialDa

有客户端和服务器。我使用
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);
}

...
模板
int sendData(SSL*SSL,int命令,T)
{
std::字符串串行数据;
OByteStream obs(串行数据);

obs如果您阅读本教程,您会发现大多数序列化程序背后的思想都是在任何地方描述应用程序定义的类型和对象。这对于boost来说就像:

class xyz
{
    int a;
    std::string b;
    std::vector<int> c;

    ...
    Serialization_Method(serializer_type &ser)
    {
       ser & a;
       ser & b;
       ser & c;
    }
}
如果可以使用序列化方法定义对象,则可以间接发送/接收所需的所有数据。描述始终在其中一种序列化方法中完成


你发送没有任何描述的“任何东西”的想法将永远不会起作用,也永远不会起作用。这仅仅是因为你的接收者必须知道将数据放入何处。如果你认为接收者端有一个程序片段,而我们认为我们可以接收“某些东西”。我们应该如何处理此类数据?您的代码必须至少了解代码和共同发起数据所表示的类和对象。如果您收到“一些未定义的”数据,您无法使用此数据!这将导致数据和两侧序列化结构的定义。对于boost,这只需使用
serializer\u obj&serializer\u data;
语句即可完成。

很难理解您的要求。也许您应该阅读有关宏的教程,然后具体解释一下它没有解决什么问题。
ser & xyz_obj;