#c #arrays #pointers
#c #массивы #указатели
Вопрос:
В файле (скажем, file1.h) содержится несколько функций. Эти функции похожи по своему определению и возвращаемому значению. Сам файл, изменять его не разрешается. Я хочу упростить их следующим образом:
файл1.h
int func1 (void)
{
return 11;
}
int func2(void)
{
return 12;
}
int func3(void)
{
return 13;
}
В моем исходном файле, который мне разрешено изменять, я хотел бы создать массив функций, а затем передать этот массив по ссылке на другую функцию, код здесь также упрощен:
source_file.cpp
static int func_main(const int idx, int* arr_of_func)
{
int ret = 0;
switch (idx)
{
case 1:
ret = arr_of_func[0];
break;
case 2:
ret = arr_of_func[1];
break;
case 3:
ret = arr_of_func[0];
break;
default:
ret = -1;
break;
}
return ret;
}
int main()
{
std::cout << "Hello World!n";
int x = 0;
cin >> x;
int (*arr[3])(void) = {func1, func2, func3};
cout << func_main(x, *arr);
system("pause");
}
Путем вызова функции func_main(x, *arr) Я не знаю, как передать массив (второй аргумент). Мне нужна ваша помощь, пожалуйста. Спасибо.
Комментарии:
1. Ну,
int*
это, конечно, не ссылка на массив функций. Вы рассматривали возможность изменения этого? Кроме того, если вы хотите передать ссылку a на массив, то почему вы используете оператор косвенного обращения к нему?2. да, вы абсолютно правы, функция (func_main()) Я хочу его создать, поэтому я не знаю, как должен передаваться второй параметр, либо по ссылке, либо по указателю.
Ответ №1:
Исправьте func_main
параметр int* arr_of_func
для массива указателей на функции int (*arr_of_func[3])()
. По умолчанию массивы передаются по ссылке.
#include <string>
#include <functional>
#include <iostream>
int func1 (void)
{
return 11;
}
int func2(void)
{
return 12;
}
int func3(void)
{
return 13;
}
static int func_main(const int idx, int (*arr_of_func[3])())
{
int ret = 0;
switch (idx)
{
case 1:
ret = arr_of_func[0]();
break;
case 2:
ret = arr_of_func[1]();
break;
case 3:
ret = arr_of_func[2]();
break;
default:
ret = -1;
break;
}
return ret;
}
int main()
{
std::cout << "Hello World!n";
int x = 0;
std::cin >> x;
int (*arr[3])(void) = {func1, func2, func3};
std::cout << func_main(x, arr);
system("pause");
}
Комментарии:
1.С C 11 вы также можете использовать
std::function
en.cppreference.com/w/cpp/utility/functional/function