C++Singelton类与命名空间与公共静态变量
C++ Singelton Class Vs Namespaces Vs Public Static Variables
以下哪种方法最适合定义全局变量:
- 公共静态类变量
- 将类的单个对象与所有私有变量一起使用:(singleton类)
- 名称空间-我应该只使用名称空间吗
我不确定这个问题是否有意义。只是想找到最佳实践。
下面的代码在语法上不正确,但我认为它应该传达这样的想法:
----------------------------------------------------------------
class Reader {
Reader();
Library* lib;
static Reader* reader;
public:
Reader* Instance () {
if (!reader) { reader = new Reader() }
return reader;
}
void setLibrary ( Library* ptr ) { lib = ptr }
Library* getLibrary { return lib }
}
Reader* Reader::reader = NULL;
int main( ) {
...
Library* lib = new Library("test");
Reader::Instance()->setLibrary(lib);
Reader::Instance()->getLibrary()->addCell("AND2X1");
}
-------------- OR -------------
class Reader {
Reader();
public:
static Library* lib;
}
Library* Reader::lib = NULL;
int main( ) {
...
Reader::lib = new Library("test");
Reader::lib->addCell("AND2X1");
}
---------------- OR -----------------
namespace Reader {
Library* lib = NULL;
}
int main( ) {
...
Reader::lib = new Library("test");
Reader::lib->addCell("AND2X1");
}
---------------------------------------------------------------
我正试图在我的C++程序中使用TCL_createCommand在TCL前端创建新命令。我无法将任何新参数传递给函数实现因此,我需要全局变量来访问函数中的一些数据。我找到的所有解决方案似乎都是使用全局变容。
我需要上述内容的另一个实例是在使用bison生成解析器时。在使用bison语法时,我需要定义全局变量来执行操作。
create命令的原型是:
Tcl_Command Tcl_CreateCommand(interp, cmdName, proc, clientData, deleteProc)
clientData
允许您将数据与命令关联起来。然后,您可以使用所需的数据,而不需要全局变量!
顺便说一句,你可能想给这个问题添加tcl
标签:-)
如果你想使用全局单例(你不应该这么做!但它们有时很有用),C++FAQ有一个不错的答案。
基本上:
class Foo_class {
public:
class bar {
public:
int x;
};
int x;
Foo_class() { x = 2; mybar = new bar(); } // This constructor will be called on first reference to the singleton
void set_bar(bar* what) { mybar = what; }
bar *mybar;
};
Foo_class& Foo()
{
static Foo_class *myclass = new Foo_class();
return *myclass;
}
int main(void)
{
typedef Foo_class::bar foobar;
foobar hmph;
hmph.x = 70;
Foo().set_bar(hmph);
foo().x = 7;
}
相关文章:
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 模板基类中的静态变量
- 类和静态变量
- 不同作用域中的静态变量和全局变量
- 静态变量声明和定义
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 在类中继承静态变量?
- "local scope"中的 C++ 初始化静态变量
- 使用静态变量的递归调用的不同输出
- 复制文件流C++静态变量
- 跨模板化函数编译的静态变量
- C++编译器是否优化了顺序静态变量读取?
- C++,每个循环初始化一个新的静态变量
- (为什么)我们可以在初始化中将非静态类成员分配给静态变量吗?
- 这些语句是否等效(静态变量、常量变量和泛型)
- 程序如何知道静态变量是否需要初始化?
- 类外的静态变量实例化
- 无法解析静态变量
- 函数局部静态变量:从性能角度来看的优点/缺点
- 访问从 CPP 文件到其他头文件的静态变量