blu*_*rnd 30 c++ singleton static namespaces
我已经在网上阅读了很多帖子和文章,但我找不到明确的答案.
我有一些具有类似用途的功能,我想要超出全局范围.其中一些需要公开,另一些应该是私有的(因为它们只是"公共"功能的辅助功能).另外,我不仅有函数,还有变量.它们只需要"私人"帮助函数,也应该是私有的.
现在有三种方式:
对我采取什么方式?结合其中一些方法的可能方法?
我想到了类似的东西:
谢谢.
Mat*_* M. 32
如上所述,使用全局变量通常是糟糕的工程实践,除非当然绝对需要(例如映射硬件,但这通常不会发生).
将类中的所有东西存放在类似Java的语言中,但是在C++中你不必这样做,事实上在这里使用命名空间是一个更好的选择,如果只是:
这是一个典型的实现:
// foo.h
#ifndef MYPROJECT_FOO_H_INCLUDED
#define MYPROJECT_FOO_H_INCLUDED
namespace myproject {
void foo();
void foomore();
}
#endif // MYPROJECT_FOO_H_INCLUDED
// foo.cpp
#include "myproject/foo.h"
namespace myproject {
namespace {
typedef XXXX MyHelperType;
void bar(MyHelperType& helper);
} // anonymous
void foo() {
MyHelperType helper = /**/;
bar(helper);
}
void foomore() {
MyHelperType helper = /**/;
bar(helper);
bar(helper);
}
} // myproject
Run Code Online (Sandbox Code Playgroud)
整齐地隐藏在源文件中的匿名命名空间是一个增强的private部分:不仅客户端不能使用内部的东西,而且他甚至根本看不到它(因为它在源文件中)因此不依赖于它(它具有明确的ABI和编译时优势!)
对于不直接依赖于这些变量的公共帮助函数,请将它们设置为非成员函数.将它们放在课堂上没有任何好处.
其余的,将它作为普通的非静态成员放在一个类中.如果您需要一个全局可访问的类实例,那么创建一个(但不要使它成为单例,只是全局).
否则,在需要时实例化它.
| 归档时间: |
|
| 查看次数: |
10027 次 |
| 最近记录: |