【发布时间】:2015-10-03 02:59:39
【问题描述】:
c++(不是 c++11)
假设我的项目中有 100 个 .cpp 文件,它们目前正在做一些工作。 所有这些文件目前都包含一些我可以轻松编辑的 globals.h 文件。
我希望这些文件中的每一个都有自己的某个对象的实例,并且我还希望该实例具有实例化它的文件的某个唯一 ID。 此外,我希望这些对象由工厂方法创建,并且我需要实例有某种方式让用户处理它们——这意味着它们不能是匿名的。
简而言之 - 我需要一种方法来为我的项目中的所有文件生成唯一 ID,我需要该文件能够在所有文件中使用相同的名称访问其自己的 ID,而且还能够访问另一个“管理器”文件中外部文件的 ID。
以下是不起作用的选项:
1。 枚举:
如果我使用枚举并给每个文件一个枚举 ID,现在我无法在 globals.h 中执行此操作:
static thePrivateInstanceInThisFile = theFactory.makeInstance(fileID);
因为我在每个文件中都需要一个不同的fileID,并且它是静态定义的,并且使用我的枚举进行唯一命名。
2。 计算自己的实例的类
在 globals.h 中定义:
class FileIDGiver{
private:
static int currentID;//initialize to 0 in cpp
int myID;
public:
FileIDGiver(){
myID = currentID++;
}
int getFileID(){
return myID;
}
}
static FileIDGiver theFileId;
static thePrivateInstanceInThisFile = theFactory.makeInstance(theFileId.getFileID());
这将为每个静态文件实例提供一个 ID,该 ID 对文件来说是唯一的,但现在它无法在文件外部进行管理。
我想过做类似的事情
globals.cpp
int file1ID;
int file2ID;
...
globals.h
extern file1ID;
extern file2ID;
...
file1.cpp
file1ID = theFileId.getFileID();
file2.cpp
file2ID = theFileId.getFileID();
...
每当用户需要管理文件时,他要么使用文件的 ID 变量,要么以上述方式创建一个新变量。
这将允许我在外部访问每个唯一且自动的文件 ID。
我遇到的唯一问题是file1ID = theFileId.getFileID(); 行仅在运行时执行,在static thePrivateInstanceInThisFile = theFactory.makeInstance(theFileId.getFileID()); 行之后。
在编译时执行。
我想不出一个好方法来颠倒这个顺序,或者可能做一个完全其他的机制。
再次 - 我需要:
自动创建的文件 ID
唯一的文件 ID(最好是数字)
在所有文件中通过相同的变量名使用这些 ID(自动使用 globals.h 文件中的静态变量定义)
能够通过使用另一个手动定义的变量手动访问特定文件 ID。
请提供一些好的方法来完成此操作
谢谢。
【问题讨论】:
-
将其称为 C++03 或更旧的标准。 C++11 是 C++。
-
“我的项目中有 100 个 .cpp 文件”您可能应该使用数据库。我不明白您要做什么,但这几乎可以肯定是错误的方式。
-
你能用
__FILE__作为唯一ID吗? -
FILE 接近,它在编译时生成一个唯一的 id。但是用户如何从“经理”访问文件?
-
@msw 回想起来,在项目失败后,这正是我失败的原因。应该使用数据库。我从中学到了。
标签: c++ uniqueidentifier