Передача функции в параметры другой функции
void pr1(int a)
{
std::cout<<"A: " << a;
}
void pr2(int a, int b)
{
std::cout<<"A: " << a << "B: " << b;
}
void pr3(std::string s)
{
std::cout<<s;
}
void print(/*Указатель на функцию и ее параметры*/)
{
}
Как можно в print передать для вызова какую-либо функцию? А так же все параметры, которая принимает сама функция. Как это можно сделать в стиле C, без использования, например, std::function
int main(int argc, const char * argv[]) {
print(/*Параметры и указатель на функцию*/);
return 0;
}
Ответы (1 шт):
Автор решения: LShadow77
→ Ссылка
Не знаю точно, что именно требуется от вашей функции print(), по-этому привожу два варианта:
#include <stdio.h>
#include <iostream>
//Вариант 1
template <typename TRet, typename... TArgs>
TRet print1(TRet (*pFunc)(TArgs...), TArgs... args)
{
return pFunc(args...);
}
//Вариант 2
template <typename TRet, typename... TArgs>
TRet print2(TRet (*pFunc)(TArgs...), const char* pcszFmt, TArgs... args)
{
printf(pcszFmt, args...);
return pFunc(args...);
}
//собственно функция, указатель которой передаём в print()
void pr2(int a, int b)
{
std::cout<<"A: " << a << ", B: " << b << std::endl;
}
int main()
{
std::cout << "Variant 1:" << std::endl;
print1(pr2, 12, 7);
std::cout << "-------------------------" << std::endl << std::endl;
std::cout << "Variant 2:" << std::endl;
print2(pr2, "Arguments: a==%d, b==%d ---> function output: ", 12, 7);
std::cout << "-------------------------" << std::endl << std::endl;
return 0;
}
Будет выведено:
Variant 1:
A: 12, B: 7
-------------------------
Variant 2:
Arguments: a==12, b==7 ---> function output: A: 12, B: 7
-------------------------
P.S. Замечу, что в функцию print2() следует передавать простые типы, такие как int, char* и пр. Например, std::string тут не покатит, т.к. printf() такое не понимает.