Я новичок в C++, и я узнал о lambdas, функторах и вызывающих сообщениях, и я знаю, что существует класс-оболочка, а именно std::function
, который позволяет хранить и записывать записи различных типов (до тех пор, пока они имеют одну и ту же сигнатуру вызова или тип функции).std :: тип функции и экземпляр шаблона
Теперь я понимаю, что вы можете иметь функции с параметрами типа функции, которые на самом деле просто функционируют параметры указателя как в:
void fun(int,int*(int,int&));
, который является не более чем функция, которая принимает Int и функциональный указатель функция как int *f(int,int&)
, даже если язык позволяет мне передать функцию в качестве аргумента (с или без амперсанд) .Infact, список параметров функции может также быть записана как:
void fun(int,int*(*)(int,int&));
Теперь вернемся к std::function
Тип
Я знаю, что я могу создать экземпляр std::function
с типом функции и который позволяет передавать любые вызовы в оболочку. Но тип функции не тип можно использовать в качестве типа аргумента шаблона в любой конкретизации, такие как:
std::vector<int(int)> f_vec;
вместо этого, я должен сделать вектор указателей на функции
std::vector<int(*)(int)> f_vec;
и что будет Позвольте мне вставить указатели в функцию, но не функторы или лямбды.
Итак, мой вопрос заключается в том, как я могу создать шаблон с аргументом типа типа функции? что происходит под капотом в библиотеке std::function
type.I означает, что тип функции мне кажется типом, который я не могу использовать в шаблонах ?? пожалуйста, вы можете сделать вещи немного яснее, поскольку я только начинаю изучать эти темы. Спасибо
[Как работает std :: function] (http://stackoverflow.com/q/14936539/3953764) –
Тип шаблона 'std :: vector' имеет другое требование, чем для функции std :: '. – Jarod42