我正在尝试实现一个字符工厂,但我无法理解如何创建一个通用的shared_ptr到虚拟基类,然后将其转换为构造函数中带有参数的派生类.在我的示例中,我的虚拟基类不能在构造函数中获取参数,但我需要在派生类的构造函数中使用它们.
std::shared_ptr<Character> CharacterFactory::createCharacter(Character::Type type, Character::SubType subtype, const TextureHolder &textures, sf::Vector2u windowSize) {
std::shared_ptr<Character> character;
if ( type == Character::enemy ) {
std::dynamic_pointer_cast<Enemy>(character)(subType, textures, windowSize);
} else if(type == Character::player) {
//cast to player ...
}
return character;
Run Code Online (Sandbox Code Playgroud)
可能这是一个设计问题,我无法解决它.我不能使用原始指针,如果我能想到的话
character = new Enemy(...);
Run Code Online (Sandbox Code Playgroud)
本来会有用的.我发现的所有铸造示例都使用默认构造函数.
谢谢您的帮助