Ежедневный бит (е) C ++ # 169, инструмент C ++ 11 для управления связыванием символов: анонимные пространства имен.
Анонимные (безымянные) пространства имен — отличный инструмент C++11 для управления связыванием символов.
Любые символы внутри безымянного пространства имен будут иметь внутреннюю связь, т. е. символы видны только единице перевода.
// unit.h namespace MyLib { void function(); } // unit.cc namespace { // Unnamed namespace void internal_function() {} } namespace MyLib { void function() { internal_function(); } // OK, visible inside unit } void other_function() {} // main.cc int main() { MyLib::function(); // OK, accesible through header void other_function(); // manual declaration other_function(); // OK, external linkage void internal_function(); // manual declaration internal_function(); // Linker error, symbol not visible }
Откройте пример в Compiler Explorer.