Как упорядочить заголовки в проектах .NET на C ++
Вопрос
Я пытаюсь создать новый проект .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.Это несколько раздражает, что самая распространенная, самая важная из них - это то, где вы обнаруживаете проблемы, но такова жизнь.
По крайней мере, вы можете утешиться тем, что если вы создаете управляемые классы, ваши проблемы с включениями будут устранены при сборке, в отличие от проблем с файлами заголовков для неуправляемых классов.