如何调用这些回调的可变模板版本

问题描述 投票:0回答:1

每个都以 std::function 作为第一个参数,

我无法调用可变参数模板来替换所有模板,我们将不胜感激。

#include <iostream>
#include <functional>
using namespace std;

template <typename ... FArgs, typename ... Args>
void run_callback(std::function<void(FArgs...)> && func, Args && ... as)
{
    std::cout << "vardiac called\n" ;
}
void run_callback(std::function<void()>&& func) {
    func();
}

void run_callback(std::function<void(int)>&& func, int data)
{
    func(data);
}

void run_callback(std::function<void(int, int)>&& func, int data1, int data2) {
    func(data1, data2);
}
void sum(int , int)
{
    
}
int main()
{
    run_callback([](){std::cout << "none" << '\n';});
    run_callback([](int j){std::cout << "none1: " << j <<  '\n';},12);
    run_callback([](int j, int i){std::cout << "none2: " << j << ',' << i << '\n';},12,17);
    run_callback(sum, 5,4);
}
c++11
1个回答
0
投票
template <typename F, typename ... Args>
void run_callback(F&& func, Args && ... as)
{
    func(std::forward<Args>(as)...);
}

演示

© www.soinside.com 2019 - 2024. All rights reserved.