[英]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.