template<typename T,void(*f)(T &v)>
void foreach(T array[],unsigned size)
{
for (int i = 0; i < size; ++i)
{
f(array[i]);
}
}
template<typename T>
void inc(T &v){++v;}
template<typename T>
void dec(T &v){--v;}
template<typename T>
void print(T &v){cout<<" "<<v;}
int main(int argc, char const *argv[])
{
/* code */
int array[]={1,2,3,4,5,1,2,6,7};
foreach<int,print<int>>(array,9);
cout<<endl;
foreach<int,inc<int>>(array,9);
foreach<int,print<int>>(array,9);
cout<<endl;
foreach<int,dec<int>>(array,9);
foreach<int,print<int>>(array,9);
cout<<endl;
system("pause");
return 0;
}