Member 14167755 Ответов: 2

C программа для ответа на вопрос


У меня есть описание проблемы.
У меня есть файл, имеющий определенные 100 функций.
например: func_a()
func_b()
..
Я создаю функцию, которая может вызывать эти функции в соответствии с требованиями пользователя
например: если пользователь хочет вызвать всю функцию, то пользователь передаст "все" в качестве аргумента, а если пользователь хочет вызвать определенную функцию, то он просто передаст имя функции в качестве аргумента.

Пожалуйста, дайте решение этой проблемы.

Что я уже пробовал:

Я попытался создать указатель функции для этого решения.Мне нужна еще помощь в этом деле.

2 Ответов

Рейтинг:
4

Richard MacCutchan

Я бы использовал массив записей структуры. Структура должна содержать имя функции в виде строки, указателя на фактическую функцию. Что-то вроде:

struct ftable
{
    char* funcName;
    void (*function)();
}
functionTable[] =
{
    { "func_a", func_a },
    { "func_b", func_b }
// etc.
};

Затем вы можете проверить, вводит ли пользователь "все", просто пройдя через таблицу, вызывающую каждую функцию. Если они вводят имя функции, то ищут запись в таблице и вызывают ее напрямую.

Это предполагает, что все функции имеют одинаковые входные параметры и возвращаемые значения.


CPallini

5.

Richard MacCutchan

Спасибо, Карло.

Rick York

Вот версия с небольшим препроцессором веселья и игр :

#define TableEntry(a)  { #a, a }

functionTable[] =
{
    TableEntry( func_a ),
    TableEntry( func_b ),
    TableEntry( func_c )
}
Оператор string-izing очень удобен. Я часто использую его для самых разных вещей.

Richard MacCutchan

Хорошее предложение, именно то, что я использую сам. Я просто старался, чтобы мой ответ был простым.

Rick York

Хорошая точка. ;)

Рейтинг:
2

CPallini

В качестве альтернативного подхода вы можете встроить скриптовый язык (например, Lua) в свое приложение, см. Программирование на Lua : 25[^]. Пользователю разрешено вызывать функции скрипта вашего файла, просто набрав их имя.