У меня есть много проектов 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