gpt4 book ai didi

c++ - 函数的模板推导如何在 C++ 中工作?

转载 作者:行者123 更新时间:2023-11-30 04:49:19 30 4
gpt4 key购买 nike

我遇到过这段为事件调度程序编写的代码。它会首先检查事件的类型是否是它想要的类型,然后它会运行一个以事件作为参数的模板函数,我对该函数的参数语法有疑问( (*( 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 转换为指向 T 的指针。然后取消引用所有这些的结果(最左边的 *)。最后,这只是将对对象 m_Event 的引用传递给对 func 的调用的一种可疑的复杂方式(除非有一些运算符重载正在进行,我们应该意识到)。

一般来说,这段代码对我来说看起来不太好。这里需要这样的类型转换这一事实令人担忧。很可能这整个装置实际上是在调用未定义的行为,但如果不知道是什么,就很难说,例如,整个 GetEventType()GetStaticType() 业务是关于什么的以及是什么这里涉及的所有类型实际上都是……

PS:参数 func 最好在这里通过引用传递。

关于c++ - 函数的模板推导如何在 C++ 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55464716/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com