Как упорядочить заголовки в проектах .NET на C ++

StackOverflow https://stackoverflow.com/questions/150186

  •  02-07-2019
  •  | 
  •  

Вопрос

Я пытаюсь создать новый проект .NET C ++ с нуля.Я планирую смешать управляемый и неуправляемый код в этом проекте.

эта тема форума IDataObject Объект IDataObject :ошибка с неоднозначным символом отвечает на проблему, с которой я сталкивался несколько раз.

В сообщении # 4 говорится "Переместить все "с использованием пространства имен XXXX" из .h в .cpp"

это выглядит как хорошая идея, но теперь в моих заголовочных файлах мне нужно ссылаться на параметры из .NET Framework, такие как

void loadConfigurations(String^ pPathname);

Как я должен перемещать инструкции using в файле .cpp и использовать соответствующие пространства имен в файле .h?

Это было полезно?

Решение

Рекомендуется всегда использовать полные имена в заголовочных файлах.Потому что using оператор влияет на весь следующий код независимо от #include, помещая using оператор в заголовочном файле влияет на всех, кто может включать этот заголовок.

Таким образом, вы бы изменили объявление вашей функции в вашем заголовочном файле на:

void loadConfigurations(SomeNamespace::String^ pPathname);

где SomeNamespace - это имя пространства имен, в котором вы были using ранее.

Другие советы

Я мало что знаю о .NET, поэтому мой ответ применим только к неуправляемой части вашего вопроса на c ++.Лично это одна из главных причин, по которой я как чумы избегаю инструкций "using namespace XXXX;".

Я предпочитаю просто быть явным с пространствами имен, такими как "std::cout << "привет, мир" << std::endl;"

Это позволяет избежать конфликтов пространств имен, и никогда не возникает никакой двусмысленности относительно того, откуда что-то взялось.Кроме того, когда вы делаете что-то вроде "using namespace std;", вы как бы отменяете то, что дают вам пространства имен.Они были разработаны, чтобы избежать коллизий, и, импортируя все в глобальный файл, вы просто вызываете коллизии обратно.

Это строго вопрос мнения и вкуса.

Что касается того, что делать в заголовках, я просто пишу такие вещи, как это:"void f(const std::string &s);"

Чтобы решить эту проблему, я сделал это в файле .h:

namespace TestClassNS
{
  class TestClass;
}

и затем в файле .cpp я бы #включил файл .h, в котором был TestClass, и сделал бы там using namespaceTestClassNS .

Мой C ++ устарел, так что, возможно, есть способ получше.

По моему опыту, единственное пространство имен, с которым вам нужно быть осторожным, - это сама System.Это несколько раздражает, что самая распространенная, самая важная из них - это то, где вы обнаруживаете проблемы, но такова жизнь.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top