Q_ENUM to ostream
Q_ENUM to ostream
在一个项目中是自定义记录器,我想扩展到像qdebug()一样,以写入枚举值。有一些简单的方法吗?
这是我认为可以起作用的东西(并且它行不通):
template <typename T>
typename QtPrivate::QEnableIf<QtPrivate::IsQEnumHelper<T>::Value, std::ostream>::Type
operator<<(std::ostream& os, T enumValue)
{
const QMetaObject* mo = qt_getEnumMetaObject(enumValue);
int enumIdx = mo->indexOfEnumerator(qt_getEnumName(enumValue));
return os << mo->enumerator(enumIdx).valueToKey(enumValue);
}
class MyObjet : public QObject
{
Q_OBJECT
public:
enum class Action { Open, Save, New, Copy, Cut, Paste, Undo, Redo, Delete };
Q_ENUM(Action)
explicit MyObjet(QObject* parent);
void myFunction(Action a)
{
std::count << "Action is:" << a << std::endl;
}
};
这是插入运算符过载,我将其放在名为 qtenum2ostream.h 的标题文件中:
#ifndef QTENUM2OSTREAM_H
#define QTENUM2OSTREAM_H
#include <QMetaEnum>
template<typename T>
typename std::enable_if<QtPrivate::IsQEnumHelper<T>::Value, std::ostream &>::type
operator<<(std::ostream & o, const T & t)
{
const QMetaObject* metaobject = qt_getEnumMetaObject(t);
int enumindex = metaobject->indexOfEnumerator(qt_getEnumName(t));
o << metaobject->enumerator(enumindex).valueToKey(static_cast<int>(t));
return o;
}
#endif // QTENUM2OSTREAM_H
您现在可以在示例类中使用它:
#include "qtenum2ostream.h"
#include <iostream>
#include <QObject>
class MyObject : public QObject {
Q_OBJECT
public:
enum class Action { Open, Save, New, Copy, Cut, Paste, Undo, Redo, Delete };
Q_ENUM(Action)
void myFunction(Action a)
{
std::cout << "Action is:" << a << std::endl;
}
};
相关文章:
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- C++ Singleton - Prevent ::instance() to variable
- ostream过载时的缓冲区冲洗
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- Visual Studio Code "undefined reference to `WinMain@16'"
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 需要从 istream 和 ostream 派生 iostream
- 如何解决"invalid conversion from 'char' to 'const char*'"
- 使用 MATLAB 编码器生成C++代码:编译错误"undefined reference to `rgb2gray_tbb_real64'"
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- Python str to C++ to Python str
- 为什么创建友元类的实例会导致"undefined reference to"错误?
- System.InvalidCastException - SQL to C++ - safe_cast<float>
- Q_ENUM to ostream
- C FILE* to ostream/istream
- std::ostream to QDataStream
- "Invalid operands to binary expression (ostream and void)"是什么意思,如何解决?
- c++ stringstream to ostream to string
- std::ostream to QString?