Я просматривал код (С++) и нашел что-то вроде этого:
//Foo.cpp
namespace
{
void SomeHelperFunctionA() {}
void SomeHelperFunctionB() {}
void SomeHelperFunctionC() {}
//etc...
class SomeClass //<---
{
//Impl
};
}
SomeHelperFunction[A-Z]
— это функции, которые нужны только в этой единице перевода, поэтому я понимаю, почему они находятся в анонимном namespace
. Точно так же SomeClass
также требуется только в этой единице перевода, но у меня сложилось впечатление, что вы можете иметь классы с одинаковыми именами в разных единицах перевода без каких-либо конфликтов имен при условии, что у вас нет объявления глобального класса (например, в обычно включаемом заголовочном файле).
Я также должен упомянуть, что эта конкретная единица перевода не включает какие-либо заголовки, которые могли бы объявлять класс с идентичным именем (SomeClass
).
Итак, учитывая эту информацию, может ли кто-нибудь пролить свет на то, почему первоначальный программист мог это сделать? Может быть, просто в качестве меры предосторожности на будущее?
Честно говоря, я никогда раньше не видел, чтобы классы использовались в анонимных пространствах имен.
Спасибо!