2014-11-03 5 views
1

В Boost, 1.55, current_function.hpp читает что-то вроде этого:Какова цель этого пространства имен?

namespace boost 
{ 
namespace detail 
{ 
inline void current_function_helper() 
{ 

#if defined(__GNUC__) || (defined(__MWERKS__) && (__MWERKS__ >= 0x3000)) || (defined(__ICC) && (__ICC >= 600)) || defined(__ghs__) 

# define BOOST_CURRENT_FUNCTION __PRETTY_FUNCTION__ 

#elif ... 

#endif 

}  
} // namespace detail 
} // namespace boost 

Почему автор даже заморачиваться писать эти пространства имен?

+0

Консистенция инкапсуляции, так что все, что имеет значение, находится в соответствующем пространстве имен, а не только функция freeroaming – Creris

+0

@Creris, но эта инкапсуляция никоим образом не повлияет на пользователя файла, я прав? – qdii

+0

@qdii Я не понял, что –

ответ

3

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

Современные IDE анализируют файлы заголовков и предоставляют завершение кода, то есть предложения для имен, если вы начнете писать что-то вроде boost::c. Это было бы совершенно непригодным, если бы внутренние алгоритмы, такие как, например, copy_pod_nontrivial также будет указан.

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

Более техническая причина для этого - ADL: некоторые функции находятся по типу их аргументов (также используются аргументы шаблона для шаблонов функций); Это может вызвать поиск имени для поиска имен в официальном пространстве имен. Если в нем объявлены вспомогательные функции (или классы), это может вызвать проблемы с разрешением перегрузки.

Пользователи не должны (должны) использовать эти внутренние функции, поэтому, если вы видите код пользователя, который обращается к пространству имен, равному detail, вы должны быть настороже.

+1

Имея некоторое приятное завершение кода в среде IDE, не должно быть причин для дополнительного пространства имен. –

+0

Это всего лишь конкретный пример. Пользователь обычно не видит эти объекты каким-либо образом, независимо от того, является ли это функцией IDE или именем. – Columbo

Смежные вопросы