【发布时间】:2021-07-23 13:36:56
【问题描述】:
我有一个基类 Event,具体事件派生自它:
struct Event
{
};
struct CollisionEvent : Event
{
//CollisionEvent(Entity entityA, Entity entityB) : entityA(entityA), entityB(entityB) {}
Entity entityA;
Entity entityB;
};
这个类是一个 POD,我应该能够执行聚合初始化。但是下面的代码编译失败:
called from application:
eventBus->DispatchEvent<CollisionEvent>(mEntities[i], mEntities[j]);
in EventBus.h:
template <typename TEvent, typename... Args>
void DispatchEvent(Args&&... args)
{
auto it = mEventHandlers.find(typeid(TEvent));
if (it != mEventHandlers.end())
for (auto &&eventHandler : it->second)
eventHandler->Invoke(TEvent{ std::forward<Args>(args)... });
}
说它不能将初始化列表转换为 TEvent。为什么?
【问题讨论】:
-
缺少基础
Eventinit。CollisionEvent {{}, entityA, entityB}. -
您使用的是哪个 C++ 标准? C++17 之前的继承不符合聚合条件。
-
@Yksisarvinen C++17
-
@Jarod42 所以我必须显式初始化基础?
标签: c++ initialization aggregate forward