Именованный анонимный шаблон пространства имен ⇐ C++
-
Гость
Именованный анонимный шаблон пространства имен
Я новичок в C++, но после рефакторинга класса, который почти полностью состоял из статических методов, в функции-члены в именованном пространстве имен, я с опозданием понял, что можно добавить именованные пространства имен в анонимное, на которое затем можно ссылаться во внутренних вызовы, избегая коллизий и сохраняя их внутреннюю связь:
пространство имен MyNamespace { пространство имен { пространство имен NS { интервал у = 1; // другие внутренности... } } интервал getY(){ вернуть NS::y; } } Лично мне понравился шаблон, который побудил меня добавить макрос для большей ясности:
#define INTERNAL_NS namespace { namespace NS { #define END_INTERNAL }} пространство имен MyNamespace { ВНУТРЕННИЙ_NS интервал у = 1; // другие внутренности... END_INTERNAL интервал getY(){ вернуть NS::y; } } Это похоже на выразительный способ избежать статических глобальных переменных и эффективно определить «частное» пространство имен. Однако, прежде чем я внесу этот шаблон во всю кодовую базу и выкопаю себе яму, о которой позже могу пожалеть, мне было интересно, что другие думают об этом подходе? Есть ли очевидные или неочевидные недостатки...?
Я новичок в C++, но после рефакторинга класса, который почти полностью состоял из статических методов, в функции-члены в именованном пространстве имен, я с опозданием понял, что можно добавить именованные пространства имен в анонимное, на которое затем можно ссылаться во внутренних вызовы, избегая коллизий и сохраняя их внутреннюю связь:
пространство имен MyNamespace { пространство имен { пространство имен NS { интервал у = 1; // другие внутренности... } } интервал getY(){ вернуть NS::y; } } Лично мне понравился шаблон, который побудил меня добавить макрос для большей ясности:
#define INTERNAL_NS namespace { namespace NS { #define END_INTERNAL }} пространство имен MyNamespace { ВНУТРЕННИЙ_NS интервал у = 1; // другие внутренности... END_INTERNAL интервал getY(){ вернуть NS::y; } } Это похоже на выразительный способ избежать статических глобальных переменных и эффективно определить «частное» пространство имен. Однако, прежде чем я внесу этот шаблон во всю кодовую базу и выкопаю себе яму, о которой позже могу пожалеть, мне было интересно, что другие думают об этом подходе? Есть ли очевидные или неочевидные недостатки...?
Мобильная версия