Хочется странного. Надо сваять код навроде:
template <typename C, typename T=typename C::cell_type> class wrapper {
C arr;
...
T operator []( ... ){ return C[...];
};
C[...] возвращает С::cell_type&, который к T приводится далеко не всегда, а собираться враппер должен всегда - мне проще поймать ошибку в рантайме (если до вызова [] дойдет) чем ловить ошибку компиляции питонячьего модуля, в который все в итоге протаскивается, и не инстацировать враппер. Ладно, делаем как то так:
template <class T1, class T2> T2 convert_cell( const T1& src, const T2& dst ){
throw "can't convert cell";
return dst;
}
template <class T> T convert_cell( const T& src, const T& dst ){ return src; }
template <typename C, typename T=typename C::cell_type> class wrapper {
C arr;
...
T operator []( ... ){ return convert_cell( C[...], T() );
};
Все работает, но теперь хочется наклепать convert_cell-ов позволяющих конвертить те типы к-е по дефолту конвертятся (напр. double во float). Руками их перегружать получается дофига пар, хотелось бы сваять шаблон.... но такой шаблон уже есть (который исключение кидает);-(
В идеале - хотелось бы общее решение, позволяющее ковертить тип если это возможно, и подсовывающее ф-ю с исключением если это невозможно.