如何在.NET C ++项目中排序标题
我正在尝试从头开始构建一个新的.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本身。有点烦人的是,最常见,最重要的问题是发现问题所在,但这就是生活。
至少我们可以放心,如果我们正在创建托管类,则包含问题将缓解组装障碍,这与非托管类的头文件问题不同。