C++ (не C++ 11)Как управлять уникальными идентификаторами файлов в C++
Скажем, у меня есть 100 файлов .cpp в моем проекте, которые в настоящее время выполняют некоторую работу. Все эти файлы в настоящее время содержат файл globals.h, который я могу легко редактировать.
Я хочу, чтобы каждый из этих файлов имел свой экземпляр какого-либо объекта, и я также хочу, чтобы этот экземпляр имел уникальный идентификатор файла, в котором он был создан. Кроме того, я хочу, чтобы эти объекты были созданы с помощью фабричного метода, и мне нужны экземпляры, чтобы иметь какой-то способ для пользователя обрабатывать их, то есть они не могут быть анонимными.
Вкратце - мне нужен способ генерации уникальных идентификаторов для всех файлов в моем проекте, мне нужен файл, чтобы иметь возможность доступа к его собственному идентификатору с использованием одного и того же имени во всех файлах, а также для возможности доступ к ID файла извне в другом файле «manager».
Вот варианты, которые не работают:
1. Enum:
Если я использовать перечисление и дать каждый файл в перечислимом ID, теперь я не могу сделать это в глобал .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());
Это даст идентификатор каждого статического instace файла, который является уникальным для файла, но теперь он внешне не управляется файлом.
Я думал о делать что-то вроде
globals.cpp
int file1ID;
int file2ID;
...
globals.h
extern file1ID;
extern file2ID;
...
file1.cpp
file1ID = theFileId.getFileID();
file2.cpp
file2ID = theFileId.getFileID();
...
и всякий раз, когда пользователь должен управлять файл, он будет либо использовать переменную идентификационного файла или создать новый в описанном выше порядке.
Это позволит мне получить доступ к каждому уникальному и автоматически идентификатору файла извне. Единственная проблема, с которой я столкнулся, это линия file1ID = theFileId.getFileID();
выполняется только во время выполнения, ПОСЛЕ линии static thePrivateInstanceInThisFile = theFactory.makeInstance(theFileId.getFileID());
. , который выполняется во время компиляции.
Я не могу найти хороший способ отменить этот заказ, или, может быть, сделать целый другой механик.
Опять же - мне нужно:
Автоматически создаваемые идентификаторы файлов
Уникальные идентификаторы файлов (которые очень очень предпочтительно числа)
Использование этих идентификаторов одним и тем же именем переменной во всех файлах (автоматически, используя определение статической переменной в глобалях.h файл)
Возможность доступа к конкретному идентификатору файла вручную с использованием другой вручную определенной переменной.
Пожалуйста посоветуйте хороший способ сделать это
Спасибо.
Назовите его C++ 03 или более старым стандартом. C++ 11 * - * C++. – Bathsheba
«У меня есть 100 файлов .cpp в моем проекте», вероятно, вы должны использовать базу данных. Я не понимаю, что вы пытаетесь сделать, но это почти наверняка неправильный путь. – msw
Не могли бы вы использовать '__FILE__' как уникальный идентификатор? – PBS