Что такое вспомогательные функции в С++?

Я пытался понять вспомогательные функции в С++ от The C++ Programming Language by Bjarne Stroustrup. Но книга ничего не объяснила и не использовала ее в классах. Я попытался найти его в Интернете и нашел этот. У меня есть суть этого, но все еще неясно, какова истинная цель вспомогательных функций, когда я должен использовать их и в целом, какие вспомогательные функции?

Ответы

Ответ 1

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

Функции помощника (что я считаю большинством людей, когда говорят), обычно выполняют функции, которые обертывают некоторые полезные функции, которые вы собираетесь использовать повторно, скорее всего, снова и снова. Вы можете создавать вспомогательные функции, предназначенные для использования в самых разных целях...

Примером может быть любая функция преобразования, например функция преобразования многобайтовых закодированных std::string в std::wstring:

std::wstring s2ws(const std::string& str)
{
    int size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), NULL, 0);
    std::wstring wstrTo( size_needed, 0 );
    MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), &wstrTo[0], size_needed);
    return wstrTo;
}

Ответ 2

Существует отличное определение вспомогательной функции из CppCoreGuidline:

Вспомогательная функция - это функция (обычно предоставляемая автором класса), которая не нуждается в прямом доступе к представлению класса, но рассматривается как часть полезного интерфейса для класса. Размещение их в том же пространстве имен, что и класс, делает их отношение к классу очевидным и позволяет находить их путем поиска зависимых от аргументов.

Для получения дополнительной информации вы можете проверить пункт с ясным примером, из которого берется верхняя цитата.

Ответ 3

Примером может служить функция проверки ввода, которую вы будете повторно использовать во всей основной функции. Скажем, у вас есть программа, которая запрашивает возраст пользователя, так как возраст является целым числом > 0, вам потребуется отдельная функция, которая заботится о "cin → users_age;". Если вход удовлетворяет условию, тогда продолжайте, иначе попросите пользователя повторно ввести свой возраст.

Это просто пример "вспомогательной функции". Исправьте меня, если я ошибаюсь. Спасибо!