Сделал частитчно менеджер загрузки спрайтов и моделей 3d. Загружается через load_manager
. Вот так.
Sprite *sp = load_manager<Sprite>::getModel ( "schar_00" );
А вот код класс load_manager.
#include "object.h"
#include "model.h"
#include "sprite.h"
#include <map>
#include <string>
template<typename T>
class load_manager {
private:
static std::map <std::string,Object *> map;
public:
static T *getModel ( const char *s ) {
std::string path ( s );
T *view = map [ path ];
if ( view ) return view;
view->read_file ( s );
map [ path ] = view;
return view;
}
};
Так как я создал std::map < object * >
, то хотел бы, чтобы T *view = map [ path ]
работала. Почему не может быть преобразована, если Sprite наследуется от Object? Как мне решить эту проблему?
Сделал преобразование, теперь ошибки такие.
/tmp/ccyZsl4K.o: In function `load_manager<Sprite>::getModel(char const*)':
/home/cf/projects/editor/./src/menu/../engine/load_manager.h:14: undefined reference to `load_manager<Sprite>::map[abi:cxx11]'
/home/cf/projects/editor/./src/menu/../engine/load_manager.h:18: undefined reference to `load_manager<Sprite>::map[abi:cxx11]'
Что указывает на строки где было преобразование.
Так как load_manager
содержит и работает с конкретными типами, то сделать его шаблонным не имеет никакого смысла. Его статический член map
является таблицей, для которого mapped_type
есть Object*
, и он может содержать и адреса своих производных классов, так что при инициализации вы можете туда записать и Sprite*
, но вы не можете без явного преобразования присвоить указателью Sprite*
указатель на Object
, но наоборот можно. Вы могли бы написать так:
class load_manager {
private:
static std::map <std::string, Object*> map;
public:
static Object* getModel(const char* s) {
std::string path(s);
if (!map[path])
map[path]->read_file(s);
return map[path];
}
};
И...
Object* sp = load_manager::getModel("schar_00");
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Задача: организовать максимально простое программное добавление/удаление строк в таблицу
JS(React native) только изучаю после JAVA, не пойму понять в чем фишка и почему не вызывается функция async внутри функции? Где моя ошибка?
Можно ли использовать setTimeout в качестве установки последовательности? Или может есть лучшие варианты как это сделать? Для примера вот небольшая...
У меня есть программа C++ на 1000+ строкПрограмма состоит из одной функции, которая принимает на вход пять unsigned int (или 1 unsigned char и 4 unsigned int), возвращая...