C ++ - 在哪里存储全局计数器?

时间:2010-06-04 23:02:29

标签: c++

The diagram http://www.freeimagehosting.net/uploads/2fd3f4161c.png

这是我一直在努力的应用的Minimalist-UML图。它应该模拟与不同测量相关的一堆传感器的管理。 请忽略House课程,图表已过时......

然而,我遇到了麻烦。每个传感器(声音,接触,热量,压力,气体 - 所有这些继承自sensor)都有一个唯一的ID,从第一个开始为0,以传感器总数为1开始。

为了良好实践,我应该在哪里存储传感器的总数,因此我用于输入/输出文件(保存和加载)和插入新传感器的类可以访问和增加该计数器?< / p>

感谢您的时间!

5 个答案:

答案 0 :(得分:5)

无论对象创建什么,传感器都应将标识符分配给传感器。

如果多个对象创建传感器,则应在创建传感器时为其分配指针或引用,并且在创建新的传感器对象时,应该向该提供程序查询新的唯一标识符。

答案 1 :(得分:5)

一种选择是在Sensor类中创建一个静态函数,该函数递增并返回一个静态计数器变量。 Sensor的构造函数可以调用此函数来获取ID。

// header file
class Sensor
{
...
protected:
   static int getId() { return id++; }
private:
   static int id;
   int myId;
};

// .cpp file
int Sensor::id = 0;

Sensor::Sensor(...)
: myId(getId())
  ...
{}

我在这里忽略了线程和持久性问题。但希望这会给你一个更好的主意。

答案 2 :(得分:1)

您的唯一ID(如数据库表ID)可能会出现一些问题。

您最终可能会发现您的ID需要在会话中持续存在 - 您的窗口ID会用于其他关系。

有一天,您可能会发现它需要在多个服务器/客户端集中保持唯一。

我只是建议您应该立即考虑这些问题。

至于应该生成ID的位置,因为所有“Sensor”类都从一个基类继承,我想我会通过该基类中的线程安全方法生成它 - 我将它存储在那里好。

答案 3 :(得分:0)

有什么问题?你用Vector来存储你的传感器吗?在房子里定义一个传感器对象的矢量。

  

可以访问和增加该计数器

你不必这样做,Vector会为你做这件事

答案 4 :(得分:-1)

假设您不想使用某种数据库,请查看Singleton pattern