2010-03-23 8 views
7

Sto lavorando a un progetto in cui viene utilizzata una combinazione di C# (95%) e C++/CLI (5%).Spazi dei nomi lunghi/composti quando si utilizza C++/CLI

La convenzione di denominazione dello spazio dei nomi che sto puntando è il buon vecchio Company.Technology.Etc.. Questo funziona perfettamente bene per C#. Ora, posso portare questo alle classi C++? Ho letto here che gli spazi dei nomi composti non sono supportati in C++.

sono io bloccato con goffo

namespace Company { 
    namespace Technology { 
     namespace Etc { 
      ... 
     } 
    } 
} 

al fine di rimanere coerenti?

Vale la pena cercare di rimanere coerenti?

risposta

8

Sì, sei bloccato con esso, vedere questo link. Secondo me vale la pena utilizzarlo in quanto è più leggibile e gestibile utilizzare gli spazi dei nomi. Lo faccio normalmente anche in C++ nativo.

2

Arg! L'abbiamo fatto anche qui per un po 'di codice. Odio che.

C'è davvero qualche confusione su chi firma i propri assegni? Cosa succede quando Company viene acquistato da OtherCorp oppure il reparto marketing decide che l'Technology sarà noto come eTech? Quanto codice dovrà essere cambiato?

Generalmente, sono anti-uso. Ma in situazioni come questa, dove probabilmente gli spazi dei nomi non dovrebbero mai essere realizzati e ti stai solo salvando le future modifiche al codice, incoraggio la seguente riga invece di attaccare quell'enorme verruca davanti a ogni riferimento:

using Company::Technology;

Gli spazi dei nomi devono essere generalmente creati quando si hanno diverse classi e oggetti correlati che si è tentati di inserire lo stesso nome nel loro identificatore. In questo modo, invece di fare riferimento a loro come foo_operation e foo_class devi fare foo::operation e foo::class.

2

Per definire i tipi nello spazio dei nomi annidato, sì, devi farlo come descrivi. Ma per uso i tipi, tenta namespace CTE = Company::Technology::Etc; , allora si dovrebbe essere in grado di fare per esempio CTE::SomeClass someClass;

1

La risposta accettata è in Visual Studio 2015 non è più vero.

È possibile utilizzare con tutti i sidestories il compilerflag/std: C++ più recente e ottenere gli spazi dei nomi nidificati.