Есть некий библиотечный класс
template<int D, typename T=double> Vec{
T p[D];
public:
...
};
// И попробуйте протащить это в SWIG!
template <int D, typename T1, typename T2>
inline decltype(T1()*T2()) operator * (const Vec<D, T1> &a, const Vec<D, T2> &b){...}
void foo(Vec<3>& v);
Что бы протащить все это добро в питон через swig надо указать в .i-файле
%template(Vec3) Vec<3,double>;
Теперь вопрос - а как это сделать НЕ указывая директиву %template (и не компилируя кусок кода связанный с инстацированием Vec<3> В ПИТОН, понятно что инстацирование в плюсах есть)? Желательно не поломать систему контроля типов swig. Отвечая на вопрос ЗАЧЕМ - таких инстацирований иногда бывает очень много (с разными аргументами шаблонов), иногда их приходится делать на лету (вылезло че то новое в питоньем рантайме). Это работает, но получается громоздко и создает ряд проблем.
Я могу на питоне написать класс, полностью реализующий работу Vec, могу даже сформировать из питона в памяти объект в точности отвечающий нужному плюсовому Vec. Вопроc как его дальше пропихнуть через swig в плюсы сохранив систему контроля типов от swig-а...
Я знаю, что swig руководствуется полем this - оно должно указаывать на плюсовый объект в паямти, с т.з. свига имеющий правильный тип. А как свиг понимает что тип правильный?
И как понять, что некая плюсовая переменная имеет параметризованный тип? У swig-а есть таблица типов, куда попадают в т.ч. и неинстацированные шаблоны. С ней можно как то работать из питона (ну хотя бы читать)?
------------------------------------------------------------
UPD: У свига есть таблица swig_types. Поле this питоньего объекта указывает на экземпляр
typedef struct {
PyObject_HEAD
void *ptr;
swig_type_info *ty;
int own;
PyObject *next;
#ifdef SWIGPYTHON_BUILTIN
PyObject *dict;
#endif
} SwigPyObject;
1) не хочется в питоне поддерживать поле this в актуальном виде все время, хочется его генерить только при передаче объекта в свиг. Как это сделать (перегрузка __gettattr__ не помогает)?
2) Как понять к какому типу свиг кастует объект (аргумент фунцкции) что бы находу генерить правильный this?
3) Для не-обернутых объектов свиг верещит что нет деструктора.
4) Не слишклм ли это все гнусно выглядит... ?;-)
Сast tailgunner, true_admin, monk - кто там у нас еще был Гуру по всяким извращениям;-)