Я заметил, что 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 быть экземпляром наследующего класса, который знает, что это экземпляр наследующего класса?