Есть некий библиотечный класс
template<int D, typename T=double> Vec{
T p[D];
public:
...
};
void foo(Vec<3>& v);
Что бы протащить все это добро в питон через swig надо указать в .i-файле
%template(Vec3) Vec<3,double>;
Теперь вопрос - а как это сделать НЕ указывая директиву %template (и не компилируя кусок кода связанный с инстацированием Vec<3>)? Желательно не поломать систему контроля типов swig. Отвечая на вопрос ЗАЧЕМ - таких инстацирований иногда бывает очень много (с разными аргументами шаблонов), иногда их приходится делать на лету (вылезло че то новое в питоньем рантайме). Это работает, но получается громоздко и создает ряд проблем.
Я могу на питоне написать класс, полностью реализующий работу Vec, могу даже сформировать из питона в памяти объект в точности отвечающий нужному плюсовому Vec. Вопроc как его дальше пропихнуть через swig в плюсы сохранив систему контроля типов от swig-а...
Я знаю, что swig руководствуется полем this - оно должно указаывать на плюсовый объект в паямти, с т.з. свига имеющий правильный тип. А как свиг понимает что тип правильный?
И как понять, что некая плюсовая переменная имеет параметризованный тип? У swig-а есть таблица типов, куда попадают в т.ч. и неинстацированные шаблоны. С ней можно как то работать из питона (ну хотя бы читать)?