Какова цель этого пространства имен?

В 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

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

1

Решение

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

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

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

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

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

3

Другие решения


По вопросам рекламы [email protected]