循环访问指针列表

Iterate through list of pointers

本文关键字:列表 指针 访问 循环      更新时间:2023-10-16

我正在尝试使用以下代码遍历 Window 对象指针列表:

    auto windowPtr = reinterpret_cast<std::list<Window>*>(lParam);
    for (std::list<Window*>::const_iterator it = windowPtr.begin(); it != windowPtr.end(); ++it)
    {
        if ((*it)->handle == hwnd)
        {
            state = true;
        }
    }

但是我得到一个错误标记windowPtr.begin()windowPtr.end()说:

std::list<Window> *windowPtr   Error: expression must have class type

我在这里做错了什么?

您正在寻找类似的东西吗?

BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
{
    std::list<Window*>* windows = reinterpret_cast<std::list<Window*>>(lParam);
    bool state = false;
    for (std::list<Window*>::const_iterator it = windowPtr->begin(); it != windowPtr->end(); ++it)
    {
        if ((*it)->handle == hwnd)
        {
            state = true;
        }
    }
    return TRUE;
}
int main(int argc, char** argv)
{
     std::list<Window*> windows;
     ...
     EnumWindows(EnumWindowsProc, (LPARAM)&windows);
}

或者你可以使用一些性病功能

state = std::find(windowPtr->begin(), windowPtr->end(), [=] (Window* w) {return w->handle == hwnd;}) != windowPtr->end();