【发布时间】:2015-02-26 15:56:50
【问题描述】:
系统发送 xml 警告消息。为了将 xml 文件放在一起,创建了一个类,以便可以在将其转换为 xml 之前生成警告。每条消息都必须有一个唯一的 ID。 有多独特? ID 从 3400 到 3500。如果达到最大值,则重置 ID。
#ifndef WARNINGMESSAGE_H
#define WARNINGMESSAGE_H
#include <ctime>
static unsigned int control_ID = 3399;
//Effect Codes:
const unsigned int TRAFFIC_FREE = 2;
//(...)
class WarningMessage{
public:
//setters
void setActionID();
//getters
//(...)
private:
unsigned int actionID; //to be controlled by control_ID
};
#endif // WARNINGPARAMVEHICLE_H
而在cpp文件中,当需要设置消息的id时,执行如下:
#include "project/include/warningmessage.h"
//setters
void WarningParamVehicle::setActionID(){
if(control_ID == 3500){
control_ID = 3399;
}
control_ID++;
actionID = control_ID;
}
另一个重要的细节是,该类消息的内存空间只给出一次。每次必须发送另一条消息时,实例都会被删除并重新创建:
void WarningDetector::createWarning(){
delete currentWarningMessage; // delete previous warning instance
currentWarningMessage = new WarningMessage();
(...)
}
最后,currentWarningMessage 在警告检测器中被声明为一个指针:
WarningMessage* currentWarningMessage;
我可以注意到在头文件中和类范围之外声明变量 control_ID 的不良编程习惯,但是,给定这样的场景编码看起来已优化。有没有更好的方法来解决这里看到的这个唯一标识符问题?提前非常感谢
【问题讨论】:
-
“在头文件和类范围之外声明变量 control_ID 的不良编程习惯” --- 那么,将变量放在类范围内怎么样?
-
如果您有一个WarningDetector 类来创建警告,为什么不将control_ID 放在该类中,而不是使用setActionID,只需在构造函数中传递id。新的警告消息(nextId)
-
顺便说一句,目前,每个翻译单元都有一个
control_ID,包括标题:/ -
@tenfour 如果我没记错的话,将变量放在类范围内会使我在创建新的 WarningMessage 实例时失去计数。
-
@JoãoAugusto 的确,到目前为止,您的回答似乎是我拥有的最佳选择。
标签: c++ uniqueidentifier