У меня есть XML, который описывает животное, каждое животное имеет различные параметры, выглядит примерно так:Автоматически заполнять зЬй :: Карты
<Animals>
<Cat>
</fur>
</taillength>
</Cat>
<Elephant>
</earsize>
</Elephant>
</Animals>
И у меня есть классы (Cat, слон), унаследованные из:
IAnimal
{
public: virtual IAnimal* CreateAnimal(xml) = 0 ;
}
Поэтому каждый класс может создать себя, что здорово.
Проблема заключается в том, что где-то (в какой-то завод) я должен иметь следующий код:
string name = xml->getname();
if(name.equals("cat")
{
cat.CreateAnimal(xml);
} else if (name.equals("elephant"))
{
elephant.CreateAnimal(xml);
}
Я хочу, чтобы избежать этого кода путем создания карты из String (кошка/слон) для класса, который разбирает это типа (Cat: IAnimal, слон: IAnimal)
А затем делает следующее:
map<string, IAnimal>
// populate map ...
// ...
string name = xml->getname();
mymap[name]->CreateAnimal(xml);
проблема заключается в том, чтобы автоматически заполнить карту, так что каждый класс будет dd сам во время выполнения автоматически на карту (что-то, что можно сделать с помощью статического конструктора в C#).
Я был бы рад услышать предложения в том, как это сделать, спасибо
Ваш 'метод CreateAnimal' не может быть статическим, если это виртуальный, и не может быть чисто виртуальным (' = 0 '), если это не виртуальная. – Quentin
Вы правы, Редактировал вопрос – OopsUser
Статические конструкторы на самом деле не существуют в C++: http://stackoverflow.com/questions/1197106/static-constructors-in-c-need-to-initialize-private-static-objects – dwcanillas