Quantcast
Channel: Linux.org.ru: Форум (тех. форум)
Viewing all articles
Browse latest Browse all 73832

Можно ли работать с шаблонами С++ в питоне без инстацирования?

$
0
0

Есть некий библиотечный класс

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-а есть таблица типов, куда попадают в т.ч. и неинстацированные шаблоны. С ней можно как то работать из питона (ну хотя бы читать)?

 , ,


Viewing all articles
Browse latest Browse all 73832

Trending Articles