gpt4 book ai didi

c++ - 命名空间与命名约定

转载 作者:行者123 更新时间:2023-11-30 04:13:47 26 4
gpt4 key购买 nike

<分区>

最近我为自己开始了一个新的小项目,并且正在阅读一些关于命名约定的文献。独立于哪种编码风格是首选,google coding stylehungarian notation (在我看来,系统匈牙利风格(即使有人认为它不是一个好的风格)不是应用程序风格)或我没有提到的其他一些风格。我考虑过使用命名约定或通过 namespace 进行命名。我也读过这个 post .

我的注意力在继承上。

谷歌喜欢的例子:

class MyClassInterface {
int some_stuff() = 0;
};

class MyClassA : MyClassInterface {
int some_stuff() { return 1; }
};

class MyClassB : MyClassInterface {
int some_stuff() { return 2; }
};

现在,我的想法是使用命名空间:

namespace my {

namespace interface {
class Class {
int some_stuff() = 0;
};
} // namespace interface

namespace a {
class Class : interface::Class {
int some_stuff() { return 1; }
};
} // namespace a

namespace b {
class Class : interface::Class {
int some_stuff() { return 2; }
};
} // namespace b

} // namespace my

这种命名的优点可以在这个例子中看出:

using namepsace my;

void foo(interface::Class lala) {
// do something;
}

// ...
int main() {
using namespace a;

Class bar;
foo(bar);

b::Class bar2;
foo(bar2);
}

现在我可以输入一个 using namespace 并且它将始终使用首选的那个,但是所有其他子类仍然可以通过那里的命名空间访问。

所以我的问题是,这是个好主意,还是有一些我看不到的缺点?

编辑:

我也可以用

namespace my {

namespace interface {
class Class {
int some_stuff() = 0;
};
} // namespace interface

class ClassA : interface::Class {
int some_stuff() { return 1; }
};

class ClassB : interface::Class {
int some_stuff() { return 2; }
};

} // namespace my

不要嵌套太多命名空间。

附录

我不确定 StackOverflow 是否适合提出问题,但对程序员来说甚至没有标签命名约定(但命名标准)。并且实际上并没有太多关于 namespace 和命名约定的讨论。如果错了,我可以提出我的问题。

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