Делема состоит из следующего, к примеру существует 2 функции си кода, которые в свою очередь принимают одинаковые параметры, но выполняют разные действия, в моем случае локальный, и удаленный файл.
// Выполняет открытие файла локально.
my_data* new_path(my_super_struct* data, const char* path);
// Может работать по любому доступному протоколу, `file://some_path`
// не исключение.
my_data* new_location(my_super_struct* data, const char* mrl);
При передачи данных в класс, передается булевое значение откуда открывается файл, и вот тут-то и происходит проблема, что лучше использовать, адрес на функции, или if
/else
?
Т.е. я могу сделать вызов функций одинаково что по адресу, что через if
/else
:
void some_void(const char* file_path, bool is_local)
{
// Первый вариант
my_super_data = (*(is_local ? &new_path : &new_location))(some_data, path);
// if/else не нуждается в комментировании, думаю.
}
В общем, насколько дурно пользоваться таким способом вызова функций?
Лучше это будет с constexpr if. сюда Но при условии, что is_local будет известен на этапе компиляции. Таким образом избавитесь от лишних проверок в рантайме. А если выбирать из двух - то лучше if/else и вызывать нужную. Так как присвоение указателю новой ссылки на функцию - это лишняя операция, и как это оптимизирует компилятор - знает только конкретный компилятор.
my_super_data = (*(is_local ? &new_path : &new_location))(some_data, path);
Имя функции - уже ссылка на функцию, амперсанд будет лишним и бессмысленным.
Создаю приложение в Qt для работы с базой данныхПо заданию необходимо использованием абстрактных классов
Во время отладки во второй части кода, visual начал серьезно тормозить, а программа повела себя не так как ожидалосьЯ прервал выполнение, но код...
Использую inih для парсинга ini файлаОбнаружилось то, что функция INIReader::GetReal(