#include<stdio.h>
#include<functional>
#include<iostream>

typedef void (*myCall) (int);

void funccallback(int s)
{
    std::cout<<"std::function: o numero igual="<<s<<std::endl;
}

void ccallback(int s)
{
    std::cout<<"typedef C: o numero igual="<<s<<std::endl;
}


//C++
void ciclo(int b,int e, std::function<void(int)> fcall)
{
    for(int i=b;i<e;i++)
    {
        fcall(i);
    }
}


void cicloC(int b,int e, myCall fcall)
{
    for(int i=b;i<e;i++)
    {
        fcall(i);
    }
}

int main()
{
    //C++ func
    std::function<void(int)> func = funccallback;
    ciclo(0,10,func);
    ciclo(0,10,ccallback);

    ciclo(0,10,[=](int s)-> void {std::cout<<"LambdaCall o numero igual="<<s<<std::endl;});


   
    cicloC(0,10,ccallback);

    cicloC(0,10,[=](int s)-> void {std::cout<<"LambdaCall o numero igual="<<s<<std::endl;});

}
