43. C++ Полиморфная обертка функции

Полиморфная обертка функции

Для работы с полиморфными обертками необходимо подключить библиотеку
#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;
}

Примечание: вместо одной обертки-указателя можно создать массив/вектор и тд. с подобными указателями и вызывать их в цикле.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *