使用传递给模板函数的参数调用函数

时间:2016-02-05 13:20:00

标签: c++ templates

如何通过传递给模板函数的参数调用函数? 我试图在我得到它之后向向量添加函数,所以我可以调用该向量中的所有函数,有点像回调

#include <Windows.h>
#include <iostream>
#include <functional>

template <typename... T>
void RunFunction(std::function<void> f, T... args)
{
    f(args);
}

void testFunction(int x, int y)
{
    std::cout << (x + y);
    return;
}


int main()
{
    RunFunction(testFunction, 1, 3);
}

1 个答案:

答案 0 :(得分:3)

你可能想要:

template <typename F, typename... Ts>
void RunFunction(F f, Ts&&... args)
{
    f(std::forward<Ts>(args)...);
}

void testFunction(int x, int y)
{
    std::cout << (x + y);
}

int main()
{
    RunFunction(testFunction, 1, 3);
}

作为

std::function<void>不是你想要的,而是std::function<void(Ts...)> f(args);应为f(args...)

然后Sig的{​​{1}}无法推断std::function<Sig>