C++ 单例类与命名空间与公共(public)静态变量

标签 c++ static namespaces tcl bison

以下哪种方法最适合定义全局变量:

  1. 公共(public)静态类变量
  2. 将类的单个对象与所有私有(private)变量一起使用:(单例类)
  3. 命名空间 - 我应该只使用命名空间吗?

我不确定这个问题是否有意义。只是想找到最佳实践。

下面的代码在语法上不正确,但我认为它应该表达了这个想法:

----------------------------------------------------------------
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/

相关文章:

.net - 当公司拥有所有大写字母时命名空间的命名指南

c++ - 缩小从 `int`(常量表达式)到 `unsigned int` 的转换 - MSVC vs gcc vs clang

c++ - 事件驱动的 SDL2

c++ - libvlc 检查媒体位置是否有效

java - 具有继承的静态 block 的行为

java - 我做错了什么?静态错误 [Java]

c++ - 在 C++ 中使用并行处理加速矩阵计算?

node.js - 无法为我的静态资源 Express 设置缓存控制 header

c++ - 命名空间内类的友元函数

c# - Subsonic 3 - 隐藏命名空间 - 可能是我