У меня есть класс с именем «package», который является основой производного «shader_package».
Экземпляры пакета обычно генерируются исключительно в функции с именем load. Он имеет указатель на пакет в качестве возвращаемого параметра. Поэтому я также могу вернуть каждый класс, полученный из пакета из-за наследования. Тем не менее, когда передается информация о типе теряется (правильно?), И я не могу больше знать, каким был исходный класс.
В моем случае, однако, это не должно быть проблемой. Вещество, возвращаемое загрузчиком, предполагается использовать в конструкторе класса или операторе присваивания, который затем использует информацию в производном от коррелирующего пакета для инициализации своих переменных-членов.
Как я могу сделать это правильно, без использования типа объединения или варианта?
РЕДАКТИРОВАТЬ:
Какой-то псевдокод, иллюстрирующий то, чего я хочу достичь
class package{
//actual contents are not relevant. The base doesnt have any virtual functions. Only data
}
.
class shader_package:public package{
private:
shaderData data;
public:
//getters setters and other standard stuff. Not really relevant
}
.
.
package* import(const char* path){
string extension = getExtension(path);
if(extension == ".shader"){
shaderData data;
//somehow populate shaderData
return new shader_package(shaderData);
}
/* Check for other types and return other derived packages*/
}
.
.
.
main{
shader nShader(import("pathToShader"));
/*Do stuff with it*/
}
Задача ещё не решена.
Других решений пока нет …