Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Class vs Namespace, Где предпочтительнее размещать? 
V
    Опции темы
spyswamp
Дата 27.11.2011, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 18.8.2006

Репутация: 1
Всего: 7



Кто где размещает константы? А т.н. "утилитарные" функции? Просто лично я привык это делать в специализированных классах (в случае функций - static). Но, возможно, этот подход не всегда оправдан и стоит это делать в namespace'ах? Само-собой, имеются ввиду сущности, используемые в нескольких единицах трансляции. В рамках одной единицы константы я просто объявляю в пустом namespace.


--------------------
- why you call it beta?
- cuz it's betta then nothin'
PM MAIL   Вверх
borisbn
Дата 27.11.2011, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 22
Всего: 135



Если проводить аналогию дальше, то структуры лучше размещать в namspace'ах, т.к. их тогда можно предобъявлять
Код

// h
namespace NS {
    struct A;
}
void foo( const A & a );
// cpp
namespace NS {
    struct A {
        int x;
    };
}
void foo( const A & a ) {
...
}

и, раз уж объявлять структуры удобнее в namespace'ах, то для универсальности IMHO и константы и ф-ции лучше объявлять там.

P.S. Как показывает практика - "константы" лучше считывать из конфига. Кроме "железных", конечно, типа радиуса Земли, скорости света и т.п.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Earnest
Дата 27.11.2011, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 53
Всего: 183



Мне кажется, это вопрос вкуса и личного стиля, типа способа расстановки скобок. Я чаще всего делаю для утилиты или какого-то большого функционального модуля namespace, чтобы потом не париться с длинными именами: у меня там будет CController, CAgent, CParams и т.д., т.к. утилиты чаще всего строятся по общему шаблону (не в смысле template, а скорее в смысле pattern). Но и утилитные клаccы (типа traits) тоже использую, когда это кажется более удобным.


--------------------
...
PM   Вверх
mes
Дата 27.11.2011, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



spyswamp, смотря какую сущность они отражают.. в класс пихаю только необходимое, ибо это связывание рук..
так например если несколько свойств отражают паттерн traits (шаблоны) то естественно они должны быть помещены в структуру/класс..
ежели это свойство общего назначения,то неймспейс напрашивается сам собой... 

Цитата(spyswamp @  27.11.2011,  09:01 Найти цитируемый пост)
 лично я привык это делать в специализированных классах 

ищите суть и красоту и все постепенно обретет свои места.. нужно понимать зачем Вы там размещаете и какую выгоду от этого используете.. 
в противном случае это напоминает слепое следование дядиному совету.. 





--------------------
PM MAIL WWW   Вверх
spyswamp
Дата 28.11.2011, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 18.8.2006

Репутация: 1
Всего: 7



borisbn, я вообще все свои классы делаю в нэймспэйсах. smile А по поводу конфигов: не все туда логично запихивать. Есть вещи, которые настройки не подлежат, например.


Earnest, префикс к имени класса - это моветон. smile


mes, есть вещи, которые по сути можно разместить и там, и там. В этом-то и вся проблема.


--------------------
- why you call it beta?
- cuz it's betta then nothin'
PM MAIL   Вверх
newbee
Дата 28.11.2011, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 4
Всего: 19



Цитата(spyswamp @  28.11.2011,  16:51 Найти цитируемый пост)
А по поводу конфигов: не все туда логично запихивать. Есть вещи, которые настройки не подлежат, например.
 В конце точка лишняя и не хватает примеров smile Чем настроек больше, тем программа получается гибче. Это мое мнение, я почти всегда его придерживаюсь благо конфиги пишутся на том же языке, что и сама программа...

По поводу классов и нэймспейсов... Я предпочитаю нэймспейсы. И вообще большая часть моего кода на С++ сосредоточена в функциях, часто внутренних статических, а из нэймспейса торчит АПИ к ним. Большинство классов тоже вспомогательные...


--------------------
You're face to face
With man who sold the world
PM   Вверх
mes
Дата 28.11.2011, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(spyswamp @  28.11.2011,  14:51 Найти цитируемый пост)
mes, есть вещи, которые по сути можно разместить и там, и там. В этом-то и вся проблема. 

если по сути  можно и там и там то переносите в неймсепейс, так как класс должен стремиться к минималистичности..



--------------------
PM MAIL WWW   Вверх
spyswamp
Дата 28.11.2011, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 18.8.2006

Репутация: 1
Всего: 7



newbee, имена xml тегов, например.


--------------------
- why you call it beta?
- cuz it's betta then nothin'
PM MAIL   Вверх
newbee
Дата 28.11.2011, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 4
Всего: 19



Цитата(spyswamp @  28.11.2011,  17:40 Найти цитируемый пост)
newbee, имена xml тегов, например. 
Во-первых, xml - это фу. Во-вторых, если ты выносишь имя тега в отдельную константу, значит предполагаешь, что может понадобиться это имя изменить, значит это достойно конфига.

Добавлено через 5 минут и 10 секунд
Ну это с моей точки зрения, конечно smile


--------------------
You're face to face
With man who sold the world
PM   Вверх
spyswamp
Дата 28.11.2011, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 18.8.2006

Репутация: 1
Всего: 7



newbee, какие-то необоснованные фразы у тебя. Например, xml приходит из стороннего приложения. Не надо подводить конфиги под понятие "золотого молота". ;)


--------------------
- why you call it beta?
- cuz it's betta then nothin'
PM MAIL   Вверх
mes
Дата 28.11.2011, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(spyswamp @  28.11.2011,  14:51 Найти цитируемый пост)
префикс к имени класса - это моветон. 

к сожалению это бывает необходимостью.. в с++ нельзя иметь класс и неймспейс одного имени..  



--------------------
PM MAIL WWW   Вверх
newbee
Дата 28.11.2011, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бревно
**


Профиль
Группа: Участник
Сообщений: 703
Регистрация: 24.8.2011

Репутация: 4
Всего: 19



Цитата(spyswamp @  28.11.2011,  17:53 Найти цитируемый пост)
какие-то необоснованные фразы у тебя. Например, xml приходит из стороннего приложения. Не надо подводить конфиги под понятие "золотого молота". ;) 
Xml то расплодилось, но это не делает этот формат хорошим. Он - фу. Когда приходится с ним работать - двойное фу, если в Xml заявлен в ТЗ новой разработки - это тройное фу с переворотом и повод задуматься об адекватности задания или даже места работы. Ну это опять с моей надменной и снобской точки зрения, я не люблю делать скучную работу.

Не знаю, золотое или нет, но на моей практике все константы кроме перечислений потихоньку переходят в конфиги и рантайм.


--------------------
You're face to face
With man who sold the world
PM   Вверх
baldina
Дата 28.11.2011, 18:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 32
Всего: 101



namespace. технически класс можно приспособить под коробку для мелочей, но это нарушает (мой) взгляд на класс, как нечто цельное.  namespace появился позже класса и стал олицетворять (для меня) средство построения т.н. модуля именно как набора инструментов на одну тематику. типа math::
если набор параметров, то, возможно, структура.
хотя, конечно, все это дело вкуса

PM MAIL   Вверх
spyswamp
Дата 29.11.2011, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 349
Регистрация: 18.8.2006

Репутация: 1
Всего: 7



newbee, мне самому XML из-за неудобства использования не нравится. smile Но уж пока сложилось так, что для многих этот формат коронный. :(


--------------------
- why you call it beta?
- cuz it's betta then nothin'
PM MAIL   Вверх
_GRIN_
Дата 29.11.2011, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


одинокий падаван
**


Профиль
Группа: Участник
Сообщений: 272
Регистрация: 18.11.2007
Где: Калуга

Репутация: 1
Всего: 7



Цитата(spyswamp @  27.11.2011,  08:01 Найти цитируемый пост)
Кто где размещает константы? А т.н. "утилитарные" функции?

В случае если константа имеет значение только в контексте класса - то внутри класса (static) (хороший пример QFile::remove(QString) - удаление файла по имени непосредственно относится к файлу - нет смысла переносить его в namespace).

В противном случае в namespace. Но это случается очень редко. Как правило используется соответствующий синглтон, возвращающий значения опредёлнных констант.

Тоже самое касательно "утилитарных функций".


--------------------
Дорогу осилит идущий
PM MAIL Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0587 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.