Я пытался понять вспомогательные функции в C ++ из The C++ Programming Language by Bjarne Stroustrup
, Но книга ничего не объяснила об этом и цели использования этого в классах. Я попытался найти его в Интернете и нашел этот. Я понял суть этого, но все еще неясно, какова реальная цель вспомогательных функций, когда я должен их использовать и в целом, что такое вспомогательные функции?
«вспомогательная функция» это не термин, который вы найдете в стандарте, и он не имеет точного определения … стандарт упоминает «класс помощника» или же «вспомогательный шаблон» несколько раз для ссылки на класс, который не предназначен для создания экземпляров конечными пользователями, но он предоставляет полезную функциональность, внутренне используемую в другом классе.
Вспомогательные функции — это (как я полагаю, большинство людей имеют в виду, когда говорят это) обычно функции, заключающие в себе некоторые полезные функции, которые вы собираетесь использовать повторно, скорее всего, снова и снова. Вы можете создавать вспомогательные функции, предназначенные для разных целей …
Примером может быть функция преобразования любого вида, например, функция преобразования многобайтового кодированного 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;
}
Существует большое определение вспомогательной функции из CppCoreGuidline:
Вспомогательная функция — это функция (обычно предоставляемая автором класса), которая не нуждается в прямом доступе к представлению класса, но рассматривается как часть полезного интерфейса к классу. Помещение их в то же пространство имен, что и класс, делает их связь с классом очевидной и позволяет находить их в зависимости от аргументов.
Для получения дополнительной информации вы можете проверить параграф с наглядным примером, из которого взята верхняя цитата.
Примером может служить функция проверки ввода, которую вы будете повторно использовать во всей основной функции. Допустим, у вас есть программа, которая запрашивает возраст пользователя, так как age является целым числом> 0, вам потребуется отдельная функция, которая заботится о «cin >> users_age;». Если входные данные удовлетворяют условному выражению, продолжайте, в противном случае попросите пользователя повторно ввести свой возраст.
Это всего лишь пример «вспомогательной функции». Поправь меня, читатели, если я ошибаюсь. Спасибо!
«Вспомогательные функции» описаны в книге Бьярна Страуструпса, и я только что читал о них вчера. По мнению Страуструпа, хороший дизайн класса должен сводить к минимуму количество функций, реализующих класс. Вы не хотите иметь 50 функций в классе, в соответствии с
Страуструп. Вместо этого вы используете «вспомогательные функции», которые используют интерфейс класса (вызывайте функции-члены). Возможно, они могут быть (не уверены в этом) определены в общем пространстве имен, чтобы придать смысл своим «отношениям». Вы можете найти абзац в книге в разделе 9.7.5 главы 9.