Ton*_*ony 7 c++ macros qt qevent
我需要为Qt应用程序创建几个自定义事件类.
现在,看起来我需要为每个事件类实现以下事件类型注册代码:
class MyEvent : public QEvent
{
public:
MyEvent() : QEvent(registeredType())
{
}
static QEvent::Type eventType;
private:
static QEvent::Type registeredType();
}
QEvent::Type MyEvent::eventType = QEvent::None;
QEvent::Type MyEvent::registeredType()
{
if (eventType == QEvent::None)
{
int generatedType = QEvent::registerEventType();
eventType = static_cast<QEvent::Type>(generatedType);
}
return eventType;
}
Run Code Online (Sandbox Code Playgroud)
关于如何简化这个,或者至少用宏隐藏它的任何建议?
这就是模板的用途.它们可以与常量积分参数一起使用,这些参数也需要在编译时知道:
enum EventNames { UpdateEvent,... }
template<EventNames E>
class MyEvent : public QEvent
{
public:
MyEvent() : QEvent(registeredType())
{
}
static QEvent::Type eventType;
private:
static QEvent::Type registeredType();
}
Run Code Online (Sandbox Code Playgroud)
公共代码如下所示:
template<EventNames E>
QEvent::Type MyEvent<E>::registeredType()
{
if (eventType == QEvent::None)
{
int generatedType = QEvent::registerEventType();
eventType = static_cast<QEvent::Type>(generatedType);
}
return eventType;
}
Run Code Online (Sandbox Code Playgroud)
静态初始化(小心!)看起来像这样:
QEvent::Type MyEvent<UpdateEvent>::eventType = QEvent::None;
Run Code Online (Sandbox Code Playgroud)
特定于每种事件类型的代码可以实现为模板特化.
| 归档时间: |
|
| 查看次数: |
2776 次 |
| 最近记录: |