У меня есть общая проблема, когда у меня есть массив указателей на функции. Задача состоит в том, чтобы привязать функции к местоположениям в массиве на основе текстового файла конфигурации. Есть ли лучший способ сделать это, чем гигантский блок if-else-else -...- else?Регистрация обратных вызовов из текстового файла конфигурации
Легче ли реализовать функторы и привязать места к экземплярам типа?
EDIT: Например, я мог бы иметь:
void func1();
void func2();
void (*fptr[2])();
Я хочу иметь файл конфигурации ввода, который говорит мне, что func1 идет в fptr [0] и func2 идет в fptr [1].
func1, 0 func2, 1
если-то еще означает, что я потоковую линию, и я получаю строку Fname = "func1", и location_in_the_array, 0. Таким образом, я буду иметь блок:
if (fname.compare("func1"))
{
fptr[location_in_the_array] = func1;
}
else if (...) {}
Карта - хорошая идея, и она несколько раз вылетела из моего мозга, но я космический курсант и забыл об этом, прежде чем я спросил.
Что именно вы пытаетесь сделать? Указатели функций не являются постоянными, поэтому, даже если это была хорошая идея, вы не могли просто сохранить адрес в файле в массиве, что требует какой-то кодировки. А поскольку C++ действительно не имеет отражения, вам нужно сделать это с if/else. Но у меня такое чувство, что вам будет лучше с картой. – Robert
Это сильно зависит от формата текстового файла.В принципе, то, что вам нужно сделать, называется «разбор». Для простых форматов гигантский блок 'if' /' else if' может выполнять эту работу, но для чего-либо другого предпочтительны другие методы. Как выглядит ваш текстовый файл? – sbi
Вам нужно подробнее рассказать о том, что вы пытаетесь сделать, или предоставить примерный код. Трудно понять из фразы «привязать функции к местоположениям в массиве на основе файла конфигурации текста» –