2016-02-05 4 views
-1

Как я могу вызвать функцию с аргументами, переданными функции шаблона? им пытаются добавить функции к вектору после я заставить его работать так, я могу назвать все функции в этом векторе, вроде обратного вызовавызов функции с аргументами, переданными функции шаблона

#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); 
} 
+0

'std :: function ' Это вздор, вам нужно вывести тип 'f'. Вы также забыли расширить 'args' в вызове' f'. – LogicStuff

ответ

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 не может быть выведено для std::function<Sig> для testFunction.

+0

oh wow that works, есть ли шанс, что вы могли бы показать мне, как я смог бы добавить его в std: vector, чтобы вызвать его в цикле из 3 функций со всеми, имеющими разные количества аргументов? или я должен задать новый вопрос о том, как это сделать? спасибо – ramafe

+0

@ramafe: Неясно, чего вы хотите. Сожалею. – Jarod42

+0

Я хочу иметь возможность хранить функцию + ее аргументы в векторе, а затем называть ее позже, когда мне это нужно. я искал google, чтобы найти, и им не повезло – ramafe

Смежные вопросы