使用C++/CLI时,长/复合命名空间的问题

8
我正在处理一个项目,其中使用了C#(95%)和C++/CLI(5%)的混合语言。
我希望使用传统的公司.技术.等.命名空间命名约定。这对于C#来说完全没问题。那么,我能否将其应用到C++类中?我在这里读到,C++不支持复合命名空间。
那么,我是否必须使用笨拙的方式?
namespace Company {
    namespace Technology {
        namespace Etc {
           ...
        }
    }
}

为了保持一致性,值得尝试吗?

5个回答

8

是的,你必须使用它,参见这个链接。 我认为值得使用它,因为使用命名空间更易读和管理。在本地C++中,我通常也这样做。


3

从C++17开始,您将能够使用以下形式:

namespace Company::Technology::Etc {
  // ...
}

这与您的示例相当:

namespace Company { namespace Technology { namespace Etc { 
  // ...
}}}

2

糟糕!我们在某些代码中也这样做过。我讨厌这种情况。

这里是否真的有关于谁签发您工资的混乱?当 公司其他公司 收购或营销部门决定将 技术 以后称为 eTech 时会发生什么?有多少代码需要更改?

通常,我反对使用。但在像这样的情况下,其中命名空间本来就不应该存在,而你只是在保存未来的代码更改方面,我鼓励使用以下行而不是在每个引用之前放置那个巨大的瘤:

using Company::Technology;

当你想要在多个相关类和对象中使用相同名称作为它们的标识符时,应该创建命名空间。这样,你可以用 foo::operationfoo::class 代替 foo_operationfoo_class 来引用它们。


2

如果要在嵌套的命名空间中定义类型,是需要按照您所描述的方式进行的。 但是,在使用这些类型时,可以尝试使用以下代码: namespace CTE = Company::Technology::Etc; ,然后就可以使用例如 CTE::SomeClass someClass;


1

已接受的答案在Visual Studio 2015中不再适用。

您可以使用编译器标志/ std:c ++ latest,并获取嵌套命名空间,以便与所有附带故事一起使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接