我想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();
}
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
error: macro "Q_DECLARE_METATYPE" passed 2 arguments, but takes just 1
Q_DECLARE_METATYPE(std::variant<Foo, Bar>);
^
Run Code Online (Sandbox Code Playgroud)
问题是Q_DECLARE_METATYPE一个宏,而宏不喜欢,s。
您可以传递类型别名
using T = std::variant<Foo, Bar>;
Q_DECLARE_METATYPE(T)
Run Code Online (Sandbox Code Playgroud)
或额外包装使用 ()
Q_DECLARE_METATYPE((std::variant<Foo, Bar>));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
384 次 |
| 最近记录: |