стиля программирования.
                  
                  
                  
                  
                  
                  предположим, у нас есть библиотека, пусть она занимается юзерами, группами, политиками и доменами. пример от балды вообще. пусть она вся обёрнута в namespace lib { };
                  
                  
                  
                  
                  
                  и она оперирует некими сущностями (структуры + функции, работающие с ними), которые важны настолько, что удостоились отдельных вложенных неймспейсов. например, структуры — USER, GROUP, POLICY, DOMAIN. они могут включать в себя другие структуры из этого набора, например, GROUP включает в себя USER* со списком юзеров.
                  
                  
                  
                  
                  
                  неймспейсы, соответственно, lib::user, lib::group, lib::policy, lib::domain.
                  
                  
                  
                  
                  
                  примеры функций - lib::user::init( USER *user ), lib::user::fini( USER *user ), lib::group::add( GROUP *group, USER *user )
                  
                  
                  
                  
                  
                  собственно, спор о двух подходах к оформлению этого дела.
                  
                  
                  первый подход: сама структура и её функции находятся внутри неймспейса этой сущности:
                  
                  
                  
                  
                  
                  // user.h
                  
                  
                  
                  
                  
                  namespace lib::user {
                  
                  
                    
                  
                  
                    struct USER { };
                  
                  
                  
                  
                  
                    int init( USER *user );
                  
                  
                  
                  
                  
                  };
                  
                  
                  
                  
                  
                  // group.h
                  
                  
                  
                  
                  
                  #include "user.h"
                  
                  
                  
                  
                  
                  namespace lib::group {
                  
                  
                  
                  
                  
                    // здесь приходится указывать неймспейс для юзеров
                  
                  
                    struct GROUP { user::USER *users; }
                  
                  
                  
                  
                  
                    // и здесь тоже
                  
                  
                    int add( GROUP *group, user::USER *user );
                  
                  
                  
                  
                  
                  };
                  
                  
                  
                  
                  
                  второй подход: структура находится в неймспейсе верхнего уровня, её функции - в нейсмпейсе сущности:
                  
                  
                  
                  
                  
                  // user.h
                  
                  
                  
                  
                  
                  namespace lib {
                  
                  
                  
                  
                  
                    struct USER { };
                  
                  
                  
                  
                  
                    namespace user {
                  
                  
                    
                  
                  
                      int init( USER *user );
                  
                  
                  
                  
                  
                    };
                  
                  
                  
                  
                  
                  };
                  
                  
                  
                  
                  
                  // group.h
                  
                  
                  
                  
                  
                  #include "user.h"
                  
                  
                  
                  
                  
                  namespace lib {
                  
                  
                  
                  
                  
                  // здесь НЕ приходится указывать неймспейс для юзеров
                  
                  
                  struct GROUP { USER *users; }
                  
                  
                  
                  
                  
                  namespace group {
                  
                  
                  
                  
                  
                    // и здесь тоже не нужно
                  
                  
                    int add( GROUP *group, USER *user );
                  
                  
                  
                  
                  
                  };
                  
                  
                  
                  
                  
                  };
                  
                  
                  
                  
                  
                  какой подход лучше и почему?
                  
                  
                
Кмк лучше третий подход, когда всё вложено в неймспейс класса
НЕ НАДО ОРАТЬ В КОДЕ
Обсуждают сегодня