namespace WebBrowserStuff {
class WebBrowser {…};
void clearBrowser(WebBrowser& wb);
…
}
Но дело тут не только в естественности, ведь пространства имен, в отличие от классов, могут быть находиться в нескольких исходных файлах. И это важно, потому что функции вроде clearBrowser являются вспомогательными. Не будучи ни членами, ни друзьями класса, они не имеют специального доступа к WebBrowser и никак не могут расширить те возможности, которые у пользователей класса WebBrowser и так уже были. Не будь функции clearBrowser, пользователь мог бы самостоятельно вызвать clearCache, clearHistory и removeCookies. Для класса, подобного WebBrowser, можно было бы определить много таких вспомогательных функций: для работы с закладками, вывода на печать, управления «куками» и т. п. Вообще говоря, большинству пользователей будут интересны только некоторые из этих функций. Но с какой стати компиляция пользовательской программы, в которой используются только функции, относящиеся к закладкам, должна зависеть, например, от наличия функций управления «куками»? Самый простой способ разделить их – это объявить функции, относящиеся к закладкам, в одном заголовочном файле, функции управления «куками» – в другом, функции поддержки печати – в третьем и так далее:
// заголовок “webbrowser.h” – заголовок для самого класса WebBrowser,
// а также базовой функциональности, имеющей к нему отношение
namespace WebBrowserStuff {
class WebBrowser{…};
… // базовая функциональность, то есть
// функции-нечлены, нужные почти всем
// клиентам
}
// заголовок “webbrowserbookmarks.h”
namespace WebBrowserStuff {
… // вспомогательные функции, касающиеся
} // закладок
// заголовок “webbrowsercookies.h”
namespace WebBrowserStuff {
… // вспомогательные функции, касающиеся
} // “куков”
…