Как вы говорите, многое может пойти не так.Кстати, плохого актера там не поймаешь.Если символ существует, но не относится к тому типу, к которому вы его применяете, вы просто получите неприятный шок позже.
Если вы избегаете исключений, вам нужно где-то сообщить об ошибке.Поскольку ваши LoadFunctions и GetFunctionFactory () не знают, как вы хотите обработать ошибку (зарегистрировать ее, распечатать на stderr? Поднять окно сообщения?), Единственное, что он может сделать, - это сгенерировать ошибку.
Обычный способ сделать это в C состоит в том, чтобы передать параметр, в который он может поместить ошибку, если таковая возникает, и для каждой функции «проверить» успешность перед продолжением.Это может сделать поток довольно сложным.
Концепция «выброса» исключения в C ++ означает, что вам не нужно постоянно передавать указатель (или ссылку) через каждую функцию.Там, где возникает ошибка, вы генерируете ее и «выбрасываете» - немного похоже на «крик».Это приводит к тому, что весь код (кроме очистки в деструкторах) останавливается до тех пор, пока не найдет перехватчик, который обрабатывает ошибку требуемым образом.
Обратите внимание, что исключения должны обычно использоваться только для обработки ошибок, а не в обычном случаенапример, встреча с «концом файла», когда вы знаете, что чтение завершено.