Я заметил, что Swig предоставляет целый набор функций, позволяющих типизировать объекты к их родительским классам. Однако в C ++ можно создать функцию, подобную следующей:
A * getAnObject()
{
if(someBoolean)
return (A *) new B;
else
return (A *) new C;
}
Где "A" является родителем классов "B" и "C". Затем можно типизировать указатель, возвращенный в тип «B» или «C», для удобства, например:
B * some_var = (B *) getAnObject();
Можно ли как-нибудь типизировать объект, который я получил от функции создания универсальных указателей во время выполнения на языке сценариев, используя оболочки? (В моем случае, Lua?) У меня есть функция, которая может производить один из примерно сотни возможных классов, и я бы хотел избежать написания огромной структуры переключателей, которую мне пришлось бы поддерживать в C ++. В тот момент, когда я получаю общий указатель, у меня также есть строковое представление типа данных, к которому я хочу привести его.
Есть мысли? Спасибо!
- РЕДАКТИРОВАТЬ -
Я заметил, что SWIG предлагает генерировать конструкторы копирования для всех моих классов. Если бы у меня было это, я мог бы сделать что-то вроде следующего ?:
var = myModule.getAnObject(); -- Function that returns an object type-cast down to a pointer of the parent class, as in the function getAnObject() above.
var = myModule.ClassThatExtendsBaseClass(var); -- A copy constructor that SWIG theoretically creates for me
и тогда var будет экземпляром наследующего класса, который знает, это экземпляр наследующего класса?