如何在.NET C ++项目中排序标题

时间:2020-03-06 14:53:29  来源:igfitidea点击:

我正在尝试从头开始构建一个新的.NET C ++项目。我计划在此项目中混合使用托管代码和非托管代码。

这个论坛主题
IDataObject:不明确的符号错误回答了我多次见到的问题。

帖子#4的状态
"将所有"使用名称空间XXXX"从.h移动到.cpp"

这看起来是个好主意,但是现在在我的头文件中,我需要引用.NET Framework中的参数,例如

void loadConfigurations(String^ pPathname);

我应该如何在.cpp文件中使用语句移动并在.h文件中使用相应的命名空间?

解决方案

我对.NET不太了解,所以我的答案仅适用于我们问题的非托管C ++部分。就个人而言,这是我避免像瘟疫一样"使用名称空间XXXX"的主要原因之一。陈述。

我更喜欢使用诸如" std :: cout <<" hello world" << std :: endl;之类的命名空间来明确表示。

这样可以避免名称空间冲突,并且永远不会有任何歧义。另外,当我们执行诸如"使用命名空间std;"之类的操作时我们正在撤消命名空间为我们提供的功能。它们的设计是为了避免冲突,并且通过将所有内容导入到全局中,我们只需要将冲突邀请回去即可。

严格来说,这是见解和品味的问题。

至于在标头中要做的事情,我只是这样写:" void f(const std :: string&s);"

为了解决这个问题,我已经在.h文件中完成了此操作:

namespace TestClassNS
{
  class TestClass;
}

然后在.cpp文件中,我将#包括TestClass所在的.h并在其中使用namespaceTestClassNS进行操作。

我的C ++生锈了,所以可能有更好的方法。

始终在头文件中使用完全限定的名称是一个好主意。因为using语句会影响所有后面的代码,而与#include无关,所以将" using`语句放在头文件中会对所有可能包含该头文件的人产生影响。

因此,我们可以将头文件中的函数声明更改为:

void loadConfigurations(SomeNamespace::String^ pPathname);

其中SomeNamespace是我们之前使用的名称空间的名称。

以我的经验,我们唯一需要注意的命名空间是System本身。有点烦人的是,最常见,最重要的问题是发现问题所在,但这就是生活。

至少我们可以放心,如果我们正在创建托管类,则包含问题将缓解组装障碍,这与非托管类的头文件问题不同。