У меня есть большой C ++ API, который мне нужно обернуть в оболочку C ++ / CLI, чтобы сделать доступным в .NET
По большей части это работает нормально, но я столкнулся с одной областью, которая вызывает проблему полиморфизма.
На чистом C ++ API у меня есть такая функция:
vector<Parent*> getCppObjects()
{
return myVector;
}
Родитель - это тип с двумя детьми ChildA и ChildB. На стороне CLI у меня будет функция:
List<CLIParent^> getCliObjects()
{
List<CLIParent^> myList = gcnew List<CLIParent^>();
vector<Parent*> myVector = getCppObjects();
for int i=0; i < myVector.size(); ++i)
{
myList->add(gcnew CLIParent(myVector->at(i)));
}
return myList;
}
CLI Parent имеет конструктор, который принимает тип Parent, и существуют похожие классы для дочерних типов. Моя проблема в том, что на уровне C ++ я могу приводить объекты к их правильному типу, но из-за способа, которым я обернул их на уровне CLI (как всегда, являющегося родительским типом), я не могу использовать их как версии CLI дочерних типов .
Нужно ли использовать что-то вроде typeid и switch / factory для создания соответствующих типов в моем CLI API или есть более элегантное решение?