如何使std :: variant <..>可用于QVariant?

时间:2019-11-25 11:19:48

标签: c++ qt qt5

我想使用std::variant<Foo, Bar>作为QVariant的内部值。该怎么做?

#include <QCoreApplication>
#include <QMetaType>
#include <variant>

enum Foo{A, B};
enum class Bar{C, D};

Q_DECLARE_METATYPE(std::variant<Foo, Bar>);


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    return a.exec();
}

我收到此错误:

error: macro "Q_DECLARE_METATYPE" passed 2 arguments, but takes just 1
 Q_DECLARE_METATYPE(std::variant<Foo, Bar>);
                                          ^

1 个答案:

答案 0 :(得分:4)

问题是Q_DECLARE_METATYPE是一个宏,而宏不喜欢,

您可以传递类型别名

using T = std::variant<Foo, Bar>; 
Q_DECLARE_METATYPE(T)

或将其包装在额外的()

Q_DECLARE_METATYPE((std::variant<Foo, Bar>));