【问题标题】:How to make function or macros for any count of arguments with any types?如何为任何类型的任何数量的参数创建函数或宏?
【发布时间】:2015-05-30 06:29:59
【问题描述】:

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

...

【问题讨论】:

  • 很难理解你在问什么。也许您应该阅读有关宏的教程,然后具体解释它没有解决的问题。

标签: c++ c++11 macros


【解决方案1】:

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

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 &amp; serializer_data; 语句即可。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    相关资源
    最近更新 更多