以下哪种方法最适合定义全局变量:
- 公共(public)静态类变量
- 将类的单个对象与所有私有(private)变量一起使用:(单例类)
- 命名空间 - 我应该只使用命名空间吗?
我不确定这个问题是否有意义。只是想找到最佳实践。
下面的代码在语法上不正确,但我认为它应该表达了这个想法:
----------------------------------------------------------------
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");
}
---------------------------------------------------------------
我正在尝试使用 Tcl_createCommand 在带有 TCL 前端的 C++ 程序中创建新命令。我无法将任何新参数传递给函数实现 因此,我需要全局变量来访问函数内的一些数据。 我为此找到的所有解决方案似乎都在使用全局变量。
我需要上述内容的另一个实例是使用 bison 生成解析器。 我需要定义全局变量以在使用 bison 语法时执行操作。
最佳答案
创建命令的原型(prototype)是:
Tcl_Command Tcl_CreateCommand(interp, cmdName, proc, clientData, deleteProc)
clientData
允许您将数据与命令相关联。然后您可以使用您需要的数据,根本不需要全局变量!
顺便说一句,你可能想在这个问题中添加 tcl
标签 :-)
关于C++ 单例类与命名空间与公共(public)静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9914687/