簡體   English   中英

函數的模板推導如何在 C++ 中工作?

[英]How the template deduction for functions work in C++?

我遇到了這段為事件調度程序編寫的代碼。 它會首先檢查事件的類型是否是它想要的類型,然后它將運行一個模板化函數,並將該事件作為其參數,我對該函數的參數語法有問題( (*( T*)&m_Event) 意思是,為什么在 T 之前有一個星號?為什么在 T 之后有一個星號?)

class EventDispatcher
    {
        template<typename T>
        using EventFn = std::function<bool(T&)>;
    public:
        EventDispatcher(Event& event)
            : m_Event(event)
        {
        }

        template<typename T>
        bool Dispatch(EventFn<T> func)
        {
            if (m_Event.GetEventType() == T::GetStaticType())
            {
                m_Event.m_Handled = func(*(T*)&m_Event);
                return true;
            }
            return false;
        }
    private:
        Event& m_Event;
    };

(T*)是一個 C 風格的&m_Event ,在這里用於將&m_Event轉換為指向T的指針。 所有這些的結果然后被取消引用(最左邊的* )。 最后,這只是將對象m_Event的引用傳遞給對func的調用的一種可疑的復雜方法(除非有一些我們應該注意的運算符重載正在進行)。

一般來說,這段代碼對我來說不太好。 這里需要這樣的演員陣容這一事實令人擔憂。 很有可能這整個裝置實際上是在調用未定義的行為,但很難說不知道是什么,例如,整個GetEventType()GetStaticType()業務是關於什么的,以及這里涉及的所有類型實際上是什么......

PS:參數func最好在這里通過引用傳遞。

暫無
暫無

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

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