Полиморфная обертка функции
Для работы с полиморфными обертками необходимо подключить библиотеку
#include <functional>
Объект класса functional является, по сути, указателем на любую функцию или лямбда-выражение, с которыми совпадают сигнатуры.
Это весьма удобно, при создании функций, которые в качестве аргумента принимают еще какую-то функцию/функции.
void Func1()
{
cout << "Hello World_1!" << endl;
}
void Func2()
{
cout << "Hello World_2!" << endl;
}
void Func_Int(int a)
{
cout << "Your num= "<<a<< endl;
}
void Func_in_func(function<void()> Function)
{
cout<<endl<< "Call func in func"<<endl;
Function();
}
void Func4(vector<function<void()>> pVector)
{
cout<<endl << "Call func in func + vector"<<endl;
for(auto pf : pVector)
{
pf();
}
}
int main()
{
function<void()> pFunc1=Func1; //указатель на функцию без параметров
function<void()> pFunc2=Func2;
pFunc1();
function<void(int)> pFunc_Int=Func_Int; //указатель на функцию с параметром типа int
pFunc_Int(2);
Func_in_func(pFunc1); //вызов через указатель
vector<function<void()>> pVector={pFunc1,pFunc2}; //вызов через вектор
Func4(pVector);
return 0;
}
Примечание: вместо одной обертки-указателя можно создать массив/вектор и тд. с подобными указателями и вызывать их в цикле.