如何在c ++中一次又一次地从函数返回?

时间:2015-10-31 13:09:02

标签: c++

我是C ++的新手。在下面的方法中,我尝试打印而不返回。没关系。我需要的是我需要返回如下。 (需要用while while循环读取结果)。我知道一旦回归,我们就无法回头了。问题是结果一旦可用就应该在每次迭代中返回结果。 (类似于一个线程读取结果,一旦它可用,而其他线程正在运行此循环)。我可以使用回调来解决它吗?

list<string>MyLogRetriever::handleEventsOnEventID(std::string logType, DWORD eventID)
    {
        while (GetAsyncKeyState(VK_ESCAPE) != true)
        {
            wstring wsLogType = stringToWidestring(logType);
            LPCWSTR lpcwstrLogType = wsLogType.c_str();

            string string_query = "";
            string_query = string_query + "*[System/EventID= " + to_string(eventID) + "]";
            wstring wsCons = stringToWidestring(string_query);
            LPCWSTR pwsQuery = wsCons.c_str();

            getEvents(lpcwstrLogType, pwsQuery, -1);
            //printResultedEvent(myLogStructures, numberOfAvailableEvents);
            return returnResultedEvent(myLogStructures, numberOfAvailableEvents);
            numberOfAvailableEvents = 0;
        }
    }

3 个答案:

答案 0 :(得分:3)

您要求的内容类似于generator

  

在计算机科学中,生成器是一种特殊的例程,可用于控制循环的迭代行为。实际上,所有生成器都是迭代器。生成器与返回数组的函数非常相似,因为生成器具有参数,可以调用,并生成一系列值。但是,生成器不是一次构建包含所有值并返回所有值的数组,而是一次生成一个值,这需要更少的内存,并允许调用者立即开始处理前几个值。

虽然这个功能在Python等其他语言中广为人知并得到了支持,但C ++中还没有官方对发生器的支持。

作为一种解决方法,您可能希望使用一个表并将其作为参数传递给您的函数,并将每个结果附加到它并每次都返回它 - 您可以使用方法{{编写一个类1}}以产生下一个结果积分转到此{/ em>的Siyuan Ren)。

答案 1 :(得分:2)

从方法返回只有一种方法。如果要捕获更多信息,则需要附加到某种结构(例如,数组或其他耦合对象),然后返回该结构。在您的情况下,您将在执行while循环之前声明它,并在循环内使用它。或者您可以使用不同的参数多次调用该方法。

答案 2 :(得分:1)

数学函数是执行计算并返回结果的构造。函数一般指二元关系,即具有 对其中的每个项目(输入集合)的唯一映射到它的codomain(输出集合)。现在,这些集合元素本身可以是聚合的。

我不是Java或Python等其他语言的专家,但我想这也适用于他们。

根据您的用例,您可以从函数返回聚合(向量,映射,集等)作为输出。