SWIG% ignore не соответствует шаблону с typedef

У меня есть шаблонный класс Vector (как в математическом векторе, а не std :: vector), который может быть создан с размером от 2 до 4. Определение выглядит примерно так:

template <uint32_t Size, typename StorageType>
class Vector
{
public:
Vector(StorageType x, StorageType y);
Vector(StorageType x, StorageType y, StorageType z);
Vector(StorageType x, StorageType y, StorageType z, StorageType w);
...
};

В моем файле SWIG я хочу обернуть версию, которая имеет Size из 3 и StorageType из int8_t и так я делаю

%module Vector
%{
#include "Vector.h"%}

%include "stdint.i"%include "Vector.h"
%ignore Vector(int8_t, int8_t);
%ignore Vector(int8_t, int8_t, int8_t, int8_t);
%template(Vector3DInt8) PolyVox::Vector<3,int8_t>;

Но это не в состоянии %ignore запрошенные конструкторы.

Кажется, что SWIG, внутри %template макрос автоматически удаляет typedef из параметров шаблона и т.д. %template(Vector3DInt8) PolyVox::Vector<3,int8_t>; на самом деле превращается в %template(Vector3DInt8) PolyVox::Vector<3,unsigned char>;, Из-за этого %ignore не совпадает с unsigned char не совпадает int8_t,

Если я добавлю static_assert() внутри одной из функций, которую я хочу игнорировать, я получаю:

source/Vector.inl: In constructor ‘Vector<Size, StorageType>::Vector(StorageType, StorageType) [with unsigned int Size = 3u, StorageType = signed char]’:
build/PolyVoxCorePYTHON_wrap.cxx:6446:100:   instantiated from here
source/Vector.inl:56:3: error: static assertion failed: "This constructor should only be used for vectors with two elements."

Я также пытался использовать -notemplatereduce но, похоже, не имеет никакого эффекта.

Есть ли способ заставить SWIG правильно игнорировать ненужные конструкторы?

Изменить: я использую GCC 4.5 с SWIG 2.0.8

Редактировать 2: Добавлено stdint.i в .i файл, как это необходимо для типографских карт Python. Без stdint.i, %ignore работает правильно, но необходимо использовать привязки в Python.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]