gpt4 book ai didi

c++ - 有没有更好的方法在 header 中用 C++ 表达嵌套命名空间

转载 作者:IT老高 更新时间:2023-10-28 12:00:33 27 4
gpt4 key购买 nike

我从 C++ 切换到 Java 和 C#,并认为命名空间/包的使用在那里更好(结构良好)。然后我回到 C++ 并尝试以相同的方式使用命名空间,但所需的语法在头文件中很糟糕。

namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass

以下内容对我来说也很奇怪(为了避免缩进):

namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
{

有没有更短的方式来表达上面的事情?我错过了类似的东西

namespace MyCompany::MyModule::MyModulePart::...
{
public class MyClass

更新

好吧,有人说 Java/C# 和 C++ 中的用法概念不同。真的吗?我认为(动态)类加载不是命名空间的唯一目的(这是一个非常技术推理的观点)。为什么我不应该将它用于可读性和结构化,例如考虑“IntelliSense”。

目前,命名空间与您可以在其中找到的内容之间没有逻辑/粘合。 Java 和 C# 在这方面做得更好... 为什么包括 <iostream>并具有命名空间 std ?好的,如果您说逻辑应该依赖 header 来包含,为什么#include 不使用“IntelliSense”友好语法,如 #include <std::io::stream><std/io/stream> ?我认为默认库中缺少的结构化是 C++ 与 Java/C# 相比的一个弱点。

如果狂热冲突的唯一性是一个点(这也是 C# 和 Java 的一个点),一个好主意是使用项目名称或公司名称作为命名空间,你不这么认为吗?

一方面有人说 C++ 是最灵活的......但每个人都说“不要这样做”?在我看来,C++ 可以做很多事情,但与 C# 相比,在许多情况下,即使是最简单的事情,它的语法也很糟糕。

更新 2

大多数用户说创建比两个级别更深的嵌套是无稽之谈。好的,那么 Win8 开发中的 Windows::UI::Xaml 和 Windows::UI::Xaml::Controls::Primitives 命名空间呢?我认为微软对命名空间的使用是有道理的,而且它确实比 2 级更深。我认为更大的库/项目需要更深的嵌套(我讨厌像 ExtraLongClassName这样的类名,因为你可以把所有东西都放到全局命名空间中。)

更新 3 - 结论

大多数人说“不要这样做”,但是……即使是 boost 的嵌套也比一两层更深。是的,它是一个库,但是:如果您想要可重用的代码 - 将您自己的代码视为您将提供给其他人的库。我还使用更深的嵌套来使用命名空间进行发现。

最佳答案

C++17 可能会简化嵌套命名空间定义:

namespace A::B::C {
}

等价于

namespace A { namespace B { namespace C {
} } }

请参阅 cppreference 上命名空间页面上的 (8):
http://en.cppreference.com/w/cpp/language/namespace

关于c++ - 有没有更好的方法在 header 中用 C++ 表达嵌套命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11358425/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com