Я перейшов з C ++ на Java та C # і думаю, що використання просторів імен / пакетів там набагато краще (добре структуровано). Потім я повернувся до C ++ і спробував використовувати простори імен так само, але необхідний синтаксис жахливий у заголовковому файлі.
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
Мені теж здається дивним (щоб уникнути глибокого відступу):
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
{
Чи існує коротший спосіб висловити вищезазначене? Мені чогось не вистачає
namespace MyCompany::MyModule::MyModulePart::...
{
public class MyClass
Оновлення
Гаразд, деякі кажуть, що концепція використання в Java / C # та C ++ відрізняється. Дійсно? Я думаю, що (динамічне) завантаження класів не є єдиною метою просторів імен (це дуже технічно аргументована перспектива). Чому б мені не використовувати його для читабельності та структурування, наприклад, думати про "IntelliSense".
В даний час немає логіки / клею між простором імен і тим, що ви можете там знайти. Java та C # роблять це набагато краще ... Навіщо включати <iostream>
та мати простір імен std
? Гаразд, якщо ви говорите, що логіка повинна покладатися на заголовок, чому #include не використовує дружній синтаксис "IntelliSense", як #include <std::io::stream>
або <std/io/stream>
? Я думаю, що відсутність структурування у бібліотеках за замовчуванням є однією з слабких сторін C ++ порівняно з Java / C #.
Якщо унікальність для завзятих конфліктів - це одна Точка (а це також точка С # та Java), хороша ідея - використовувати назву проекту або назву компанії як простір імен, чи не так Ви вважаєте?
З одного боку, кажуть, що C ++ є найбільш гнучким ... але всі сказали "не робити цього"? Мені здається, що C ++ може робити багато речей, але має жахливий синтаксис навіть у найпростіших справах у багатьох випадках порівняно з C #.
Оновлення 2
Більшість користувачів заявляє, що створювати глибше вкладання, ніж два рівні, - це нісенітниця. Гаразд, то як щодо Windows :: UI :: Xaml та Windows :: UI :: Xaml :: Controls :: Простіри імен примітивів у розробці Win8? Я думаю, що використання простором імен Microsoft має сенс, і це насправді глибше, ніж просто 2 рівні. Я думаю, що більші бібліотеки / проекти потребують більш глибокого вкладання (я ненавиджу імена класів, такі як ExtraLongClassNameBecauseEveryThingIsInTheSameNameSpace ... тоді ви також можете розмістити все у глобальному просторі імен.)
Оновлення 3 - Висновок
Більшість кажуть "не робіть цього", але ... навіть підсилення має більш глибоке вкладання, ніж один-два рівні. Так, це бібліотека, але: якщо ви хочете використовувати код багаторазового використання - поводьтесь із власним кодом як з бібліотекою, яку ви надасте комусь іншому. Я також використовую більш глибоке вкладання для цілей виявлення, використовуючи простори імен.
namespace
ключовим словом?