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

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

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

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

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

void loadConfigurations(String^ pPathname);

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
238
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

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

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

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

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

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

namespace TestClassNS
{
  class TestClass;
}

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

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

Ответ принят как подходящий

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

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

void loadConfigurations(SomeNamespace::String^ pPathname);

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

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

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

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