Могу ли я использовать макрос C++, чтобы получить имя файла из переменной и создать из него идентификатор?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Могу ли я использовать макрос C++, чтобы получить имя файла из переменной и создать из него идентификатор?

Сообщение Anonymous »

У меня есть много проектов C++ (SFML), в которых я загружал ресурсы через пути к именам файлов. Теперь я хотел бы внедрить эти файлы ресурсов, чтобы можно было размещать автономные исполняемые файлы на GitHub. (Я сталкивался с разочарованиями, пытаясь использовать относительные пути.) Программа xxd возьмет такой ресурс, как «image1.png», и довольно безболезненно преобразует его в массив символов с именем image1_png. Ну и хорошо. Но мой SFML-код изобилует циклами, которые загружают ресурсы из имен файлов, а-ля:

Код: Выделить всё

vector textureList = {
"image1.png",
"image2.png",
...
}

...
for (auto& str : textureList) {
Texture tx;
tx.loadFromFile(str);
textures.push_back(tx);
}
Что мне действительно хотелось бы, так это использовать магию макросов, чтобы добиться чего-то подобного, без необходимости писать от руки карту соответствующих идентификаторов, сгенерированных xxd, для каждого «textureList» и "soundList" в каждом проекте:

Код: Выделить всё

for (auto& str : textureList) {
Texture tx;
string name = [the part without the extension]
string ext = [the extension]
tx.loadFromMemory(XXD_IDENTIFIER(name,ext),XXD_LEN(name,ext));
textures.push_back(tx);
}
Обратите внимание, что я не передаю в макрос строковые литералы, мне приходится работать с переменной цикла, которая содержит имена файлов. Возможно ли это, или мне просто предстоит много печатать?

Подробнее здесь: https://stackoverflow.com/questions/791 ... n-identifi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»