我试图使该函数尾部递归,以便我可以使用它来处理大量事件而不会导致堆栈溢出。我确保将递归调用放在函数的最后一行,但是它仍然使递归调用充满了调用堆栈。
我还需要做些其他事情来使其尾部递归,还是我的编译器不知道如何对其进行优化?
我应该放弃此功能,而是使用循环吗?
template <class Csi>
void GetEvents(EventHandle handle, vector<int> desiredCodes, vector<EventHandle> &events, Csi &csi)
{
if (handle == INVALID_HANDLE)
{
return;
}
int code = csi.GetEventCode(handle);
bool codeSatisfiesSearch = (find(desiredCodes.begin(), desiredCodes.end(), code) != desiredCodes.end());
if (codeSatisfiesSearch)
{
events.push_back(handle);
handle = csi.FindNextEventEx(handle, &desiredCodes[0], 0, desiredCodes.size());
}
else
{
handle = csi.FindNextEventEx(handle, &desiredCodes[0], 0, desiredCodes.size());
}
return GetEvents(handle, desiredCodes, events, csi);
}
Run Code Online (Sandbox Code Playgroud)