簡體   English   中英

C++ 中的聚合初始化

[英]Aggregate initialization in C++

我有一個基類 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。 為什么?

對於聚合初始化,您需要初始化基類,即使它是空的。

eventBus->DispatchEvent<CollisionEvent>(Event{}, mEntities[i], mEntities[j]);

在最近的標准中,關於什么是聚合和什么不是聚合也有一些變化——直到 C++17,一個具有基類的類不能被聚合初始化,所以你不能讓它在 C++ 中工作14. (見https://godbolt.org/z/Pq5PfecKq

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM