стиля программирования.
предположим, у нас есть библиотека, пусть она занимается юзерами, группами, политиками и доменами. пример от балды вообще. пусть она вся обёрнута в 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 );
};
};
какой подход лучше и почему?
Кмк лучше третий подход, когда всё вложено в неймспейс класса
НЕ НАДО ОРАТЬ В КОДЕ
Обсуждают сегодня