簡體   English   中英

使用 args 傳遞函數並將值返回給另一個函數

[英]Pass function with args and return value to another function

是否可以使用這樣的參數傳遞函數:

int func(int num)
{
 return num;
}

到這個功能:

        template<class T>
        auto addTask(T task) -> std::future<decltype(task())>
        {
            auto wrapper = std::make_shared<std::packaged_task<decltype(task()) ()>>(std::move(task));
            {
                std::unique_lock<std::mutex> lock(mEventMutex);
                mTasks.emplace([=] {
                    (*wrapper)();
                });
            }
            mEventVar.notify_one();
            return wrapper->get_future();            
        }

我知道如何在沒有 ags 的情況下傳遞函數,如下所示:

void func()
{}

它將只是:

addTask(func);

但找不到放置參數的位置。 是否可以?

您可以使用調用該函數的lambda

addTask([some_value]()
{
    func(some_value);
});

或者重寫addTask以使用模板參數包作為可能的參數:

template<typename Func, typename ...Args>
auto addTask(Func task, Args... arguments) -> std::future<decltype(task(arguments...))>
{
    auto wrapper = std::make_shared<std::packaged_task<decltype(task(arguments...)) (Args...)>>(std::move(task));
    {
        std::unique_lock<std::mutex> lock(mEventMutex);
        mTasks.emplace([=] {
            (*wrapper)(std::forward<Args>(arguments)...);
        });
    }
    mEventVar.notify_one();
    return wrapper->get_future();         
}

addTask(func, some_value);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM