代码之家  ›  专栏  ›  技术社区  ›  biozinc

使用C++时长/复合名称空间

  •  7
  • biozinc  · 技术社区  · 15 年前

    我正在研究一个项目,其中使用了C(95%)和C++/CLI(5%)的混合物。

    我所追求的名称空间命名约定已经过时了 Company.Technology.Etc. . 这对C来说非常好。现在,我可以把它转到C++类吗?我读 here C++中不支持该复合命名空间。

    我被笨手笨脚的人困住了吗?

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

    为了保持一致?

    努力保持一致是值得的吗?

    5 回复  |  直到 15 年前
        1
  •  8
  •   Simon Linder    15 年前

    是的,你被它卡住了,看这个 link . 在我看来,使用它是值得的,因为使用名称空间更易于阅读和管理。我通常也在本地C++中这样做。

        2
  •  2
  •   T.E.D.    15 年前

    啊!我们在这里也是为了一些代码。我讨厌那样。

    谁在你的工资单上签字有什么严重的困惑吗?当 Company 由购买 OtherCorp 或者市场部决定 Technology 今后将被称为 eTech ?需要更改多少代码?

    一般来说,我是反使用的。但是在这样的情况下,如果名称空间一开始就不应该被创建,而您只是在为自己保存将来的代码更改,那么我鼓励您使用下面的代码行,而不是在每个引用前面都插上这么大的漏洞:

    using Company::Technology;

    当您有几个相关的类和对象想要在它们的标识符中使用相同的名称时,通常应该创建名称空间。这样,而不是将它们称为 foo_operation foo_class 你做 foo::operation foo::class .

        3
  •  2
  •   tragomaskhalos    15 年前

    要在嵌套的命名空间中定义类型,是的,您必须按照您描述的那样做。 但要 使用 类型,试试看 namespace CTE = Company::Technology::Etc; 那么你应该能做到 CTE::SomeClass someClass;

        4
  •  1
  •   user7179930    8 年前

    接受的答案在Visual Studio 2015中不再正确。

    您可以使用所有的StudioFrimeFrime/STD:C++最新版本,并得到嵌套的命名空间。

        5
  •  0
  •   Jake Cobb    7 年前

    从C++ 17开始,你就可以使用这个表单:

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

    这相当于您的示例:

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