Я пытаюсь создать вектор std :: function, а затем передать этот вектор функции. Мне также нужно передать аргументы объектам функции, поэтому я использую std :: bind. Вот код:Проблема в передаче аргумента std :: function для вектора функций
#include <functional>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void execute(vector<function<void (int)>>& fs) {
for (auto& f : fs)
f();
}
void func(int k) {
cout << "In func " << k << endl;
}
int main()
{
int i = 1;
vector<function<void (int)>> x;
auto f1 = bind(func, i);
//f1(); // this does call intended function
x.push_back(f1);
execute(x);
}
, но это дает следующее сообщение об ошибке:
function_tmpl.cpp: In function ‘void execute(std::vector >&)’: function_tmpl.cpp:14:5: error: no match for call to ‘(std::function)()’ f(); ^ In file included from function_tmpl.cpp:1:0: /usr/lib/gcc/x86_64-pc-cygwin/4.9.2/include/c++/functional:2142:11: note: candidate is: class function ^ /usr/lib/gcc/x86_64-pc-cygwin/4.9.2/include/c++/functional:2434:5: note: _Res std::function::operator()(_ArgTypes ...) const [with _Res = void; _ArgTypes = {int}] function:: ^ /usr/lib/gcc/x86_64-pc-cygwin/4.9.2/include/c++/functional:2434:5: note: candidate expects 1 argument, 0 provided
Если я позвоню F() внутри основной(), который работает хорошо, это означает, что функция связана с аргументами , но это не работает, когда передается другой функции в качестве аргумента
'' функция принимает только функции, которые принимают 'int'. При вызове 'f()' отсутствует 'int'. Либо измените его на 'function ' или используйте 'f (0)'. –
nwp
@nwp, будет ли std :: bind не связывать аргументы с функциональным объектом? – DKR
Он делает, но 'function' все еще требует 'int'. После того, как вы привязали функцию 'int' к функции, функция bound больше не требует' int', поэтому теперь она имеет функцию подписи '. –
nwp