VS2013中的Variadic宏无效

时间:2015-11-06 19:55:59

标签: c++ visual-studio-2013

我正在尝试从名为EchoClient的QtSocketIO编译示例。

但是当我尝试使用MSVC2013进行编译时,我在echoclient.cpp

中收到以下错误
  

1> echoclient.cpp

     

1> echoclient.cpp(7):错误C2010:'。' :宏形态参数列表中的意外

代码看起来像这样我将每行中的错误作为注释

#include "echoclient.h"
#include "qsocketioclient.h"
#include <QtCore/QJsonObject>
#include <QtCore/QJsonArray>
#include <QtCore/QDebug>

#define function(args...) [=](args)   // Error expected a ')'

void EchoClient::connected(QString endpoint)
{
    qDebug() << "Connected to endpoint" << endpoint;
    m_client.emitMessage("event with 2 arguments", 
                         QVariantList() << 1 << QStringLiteral("Hello socket.io"),
                         function(QJsonArray returnValue) {  // Error expected an expression
        qDebug() << "Got reply from event with 2 arguments:" << returnValue;
    });
    m_client.emitMessage("event with a json object",
                         QVariantMap({ {"number", 1}, { QStringLiteral("message"), 
                         QStringLiteral("Hello socket.io")}}),
                         function(QJsonArray returnValue) { // Error expected an expression
        qDebug() << "Got reply from event with a json object:" << returnValue;
    });
    m_client.on("event from server", function(QJsonArray data) { // Error expected an expression
        qDebug() << "Got event from server with data" << data;
    });
}

有人可以向我解释一下这个宏在做什么吗?有没有办法解决错误?

1 个答案:

答案 0 :(得分:1)

宏使lambda看起来像普通的函数声明。它不起作用的原因是因为,如评论中所述,#define function(args...) [=](args)并不正确。将其更改为#define function(...) [=](__VA_ARGS__)即可。