У меня есть немного C ++, который я хочу сделать доступным в python.
DynamicArray.h:
#include <vector>
#include <stdexcept>
namespace mspace {
template <class T>
class DynamicArray {
// lets piggyback on std::vector.
std::vector<T> m_implementation;
public:
typedef std::vector::size_type size_type;
typedef T& reference;
typedef const T& const_reference;
const_reference operator [](size_type i) const noexcept(false)
{
if (i >= m_implementation.size())
throw std::out_of_range("Ouch i >= DynamicArray.size() ");
return m_implementation[i];
}
reference operator[](size_type i) noexcept(false)
{
if (i >= m_implementation.size())
throw std::out_of_range("Ouch i >= DynamicArray.size() ");
return m_implementation[i];
}
};
}
Проблема в том, что я использую operator [], и swig сообщаетя: DynamicArray.h:25: Warning 389: operator[] ignored (consider using %extend)
.Хорошо, у swig есть веские причины, по которым он не может автоматически обернуть mspace::DynamicArray::operator[]
Я получаю предупреждение один раз для постоянной и обычной версии.То, что я на самом деле делаю, как предлагает swig, это включает дополнительный файл, в котором я расширяю динамический массив, и как только я вижу, что он работает в python, я хочу отключить предупреждение.
Позвольте мне притвориться, что я 'мы фактически расширили DynamicArray.В настоящее время у меня есть что-то менее подробное, чем это, но, что бы я ни пытался, у меня все еще есть предупреждение.Мой интерфейсный файл array.i:
%module mspace;
%{
#include "DynamicArray.h"
%}
%include "exception.i"
%warnfilter (389) DynamicArray::operator[] const;
%warnfilter (389) DynamicArray::operator[] ;
%warnfilter (389) DynamicArray<int>::operator[] const;
%warnfilter (389) DynamicArray<int>::operator[] ;
%warnfilter (389) mspace::DynamicArray<int>::operator[] const;
%warnfilter (389) mspace::DynamicArray<int>::operator[] ;
%include "DynamicArray.h"
%warnfilter (389) DynamicArray::operator[] const;
%warnfilter (389) DynamicArray::operator[] ;
%warnfilter (389) DynamicArray<int>::operator[] const;
%warnfilter (389) DynamicArray<int>::operator[] ;
%warnfilter (389) mspace::DynamicArray<int>::operator[] const;
%warnfilter (389) mspace::DynamicArray<int>::operator[] ;
%template (IntArray) mspace::DynamicArray<int>;
Я запускаю swig как: swig -python -c++ -Wall array.i
или swig -python -builtin -c++ -Wall array.i
Я использую swig 3.0.8 из репозиториев ubuntu-16.04.
Я хочу видеть предупреждения, но также я хочу удалить предупреждения, когда я обошел их с помощью экстента.Есть ли у кого-нибудь идея, что я скучаю.Потому что я боюсь, что в моем проекте я пропускаю предупреждения, над которыми я еще не работал, потому что список таких предупреждений продолжает расти по мере роста моего проекта.