小编NoF*_*nds的帖子

递归 lambda C++17

我有以下情况,我有一个具有如下功能的类:

void GetTest(int id, std::function<void(Test)> cb);
void GetTest2(long id, std::function(void(Test2)> cb);
Run Code Online (Sandbox Code Playgroud)

cb 方法会在后台运行的方法完成后被调用,CB 方法的执行顺序无法保证。

现在我遇到了需要获取 ID 向量的情况。所以我尝试写了一个模板函数来调用这些方法,并在查询完所有ID后调用回调。

我想出了以下方法:

template <typename T, typename T2>
void QueryList(std::vector<T2> list, std::function<void(std::shared_ptr<std::vector<T>>)> finalCallback) {
    std::shared_ptr<std::vector<T>> ret = std::make_shared<std::vector<T>>();

    auto callback = [this, list, ret, finalCallback](size_t i, auto callback, T res) {
        ret->push_back(res);

        if (i + 1 < list.size()) {
            GetTest(list[i + 1], [callback, i](T test) { callback(i + 1, callback, test); });
        } else {
            finalCallback(ret);
        }
    };

    GetTest(list[0], [callback](T test) { callback(0, callback, test); …
Run Code Online (Sandbox Code Playgroud)

c++ recursion lambda asynchronous c++17

0
推荐指数
1
解决办法
100
查看次数

标签 统计

asynchronous ×1

c++ ×1

c++17 ×1

lambda ×1

recursion ×1