如何为任何类型的参数计数函数或宏?

时间:2015-05-30 06:29:59

标签: 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(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);
}

...

1 个答案:

答案 0 :(得分:0)

如果您阅读本教程,您会发现大多数序列化程序背后的想法是描述了应用程序定义的类型和对象的任何位置。这是为了提升类似:

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;语句即可完成。