Использовать пространства имен или добавлять имя поставщика при именовании классов? - PullRequest
2 голосов
/ 01 декабря 2011

В настоящее время я работаю над проектом, который только что родился.Предыдущие разработчики называли каждый класс, добавляя сокращенное имя вендора, т.е. CssMainWindow.(Css означает Cool Software Solutions).

Мой вопрос: не следует ли использовать namespace s здесь?Тогда имена классов станут намного лучше.

То есть:

namespace Css {

    class MainWindow {
        //...
    };
}

Каковы (ad | dis) преимущества обоих методов?

Ответы [ 4 ]

1 голос
/ 01 декабря 2011

Перво-наперво.

Каким бы ни был окончательный выбор, вам следует избегать как можно большего написания чего-либо в глобальном пространстве имен.Вы рискуете столкнуться с именными столкновениями там.Поэтому ваше программное обеспечение всегда должно находиться в собственном пространстве имен, и лучше, если имя отличается от тех, которые используются в библиотеках, от которых вы зависите (напоминание std уже зарезервировано).

После того, как вы получите этопространство имен, тогда вам обычно не нужно префикс больше.По крайней мере, не с именем проекта.

Однако это в основном дело вкуса, и я видел, как в прошлом утверждалось, что было проще сразу определить, откуда появился класс в отсутствие IDE... лично я считаю это и устаревшей привычкой, унаследованной от С.

1 голос
/ 01 декабря 2011

Это будет зависеть. Если в классы вашего поставщика включены некоторые вещи, например,

  • tuple, make_tuple
  • string, vector

Вы, возможно, захотите добавить префикс, чтобы предотвратить неприятные конфликты ADL 1 и общее неудобство, когда люди ожидают использовать using namespace XXX. Популярные библиотеки уже использовали эту стратегию ( XString (Xalan) , QString (Qt) , CString (MFC) и т.д.)


1 Каковы подводные камни ADL?

1 голос
/ 01 декабря 2011

Мое предложение: всегда используйте пространство имен!

Я покажу несколько преимуществ пространства имен:

// MainWindow.h
namespace Css {
  class MainWindow {
    // ...
  };
}; 

// Other.cpp
namespace Css {
  // An advantage is you don't always need to write the namespace explicitly.  
  MainWindow* window; // Not Css::MainWindow or CssMainWindow. 
}

// In some cpp files
using namespace Css; // Never do this in header file or it will cause name pollution. 
MainWindow* window; // You don't need to write Css:: in the whole file. 

Я не могу вспомнить ни одного недостатка использования пространства имен.

1 голос
/ 01 декабря 2011

Добавление префикса делает имя класса длиннее, а ввод текста занимает больше времени.Это единственный недостаток, о котором я могу подумать.

Использование пространств имен .... ну, вы можете просто поставить

using namespace Css;

в начале ваших файлов и источник файла будет потерян вместе с этим.

Думаю, в конце концов, дело за разработчиком.Есть две причины, по которым я могу подумать, почему кто-то хотел бы определить классы:

1) Для чувства собственности.В этом случае добавление префикса - это IMO.Люди, использующие ваш код, будут знать, что это YOUR code:).

2) Для группировки классов - в этом случае пространство имен имеет больше смысла.

...