Одним из способов сделать это было бы иметь статическую карту внутри функции, которая связывает параметры функции (здесь имя файла) с указателем на уникальное значение, которое она возвращает.Затем можно заставить функцию проверить, содержит ли карта входные данные, и, если это так, вернуть текстуру, связанную с ней.В противном случае вы можете выполнить загрузку, сохранить результат на карте и вернуть результат обратно.Например:
Texture* LoadTexture(const std::string& filename) {
static std::map<std::string, Texture*> previousResults;
/* Look up existing value. */
Texture* result = previousResults[filename];
/* If this doesn't exist, then go create it and pretend it was there all along. */
if (result == NULL)
result = previousResults[filename] = ActuallyLoadTexture(filename);
/* Hand back the cached result. */
return result;
}
Если вы сделаете это, вы должны быть осторожны с безопасностью потоков, поскольку множественные вызовы функции могут вызвать проблемы с картой.Синхронизируйте при необходимости.