Я пытаюсь создать класс с членом std::function
и operator()
, который вызовет упомянутый член. Вот то, что я пробовал:Как инкапсулировать std :: function
template <class R, class... Args>
class Func{
public:
Func(std::function<R(Args...)> fnx) : fn(fnx) {} //Error
R operator()(Args... a) { return fn(a...); } //Error
private:
std::function<R(Args...)> fn; //Error
};
Однако я получаю ошибку таинственное
error: function returning a function
в строках указывается как Error
, что я не понимаю --- я не вижу возвращаемая функция. Где это, и как я могу это исправить?
Полный не-рабочий пример: http://coliru.stacked-crooked.com/a/603a84184d9666a8
#include <iostream>
#include <functional>
int foo(int a, int b) { return a+b; }
template <class R, class... Args>
class Func{
public:
Func(std::function<R(Args...)> fnx) : fn(fnx) {}
R operator()(Args... a) { return fn(a...); }
private:
std::function<R(Args...)> fn;
};
Func<int(int,int)> foox;
int main() {
std::cout << foox(2,4);
return 0;
}
Пожалуйста, смотрите: http://stackoverflow.com/help/mcve – cubuspl42
я включить MCVE, сделал я не? – CygnusX1
Ну, не совсем. Код самого класса отлично, и это был только код, включенный в вопрос. Мне нужно было перейти на внешний сайт, чтобы обнаружить ошибку. Насколько я понимаю, ссылки на внешние сайты должны быть только дополнением, но минимальный рабочий пример должен быть частью самого вопроса. Теперь его вид исправлен (я не уверен, что код нужно дублировать, хотя). – cubuspl42