
Manfred Doudar wrote:
Martin Bonner wrote:
Manfred Doudar wrote:
/* Now, how do I get T out when Rank == 1, ... compiler complains about seeing a MyArray/blitz::Array of <T, Rank = 0> (, which is not defined for blitz Arrays) */ template <typename T, int Rank> typename boost::mpl::if_ < typename boost::mpl::equal_to < boost::mpl::int_<Rank> , boost::mpl::int_<1> >::type , T , blitz::Array<T,
boost::mpl::int_<Rank>::prior::value>
^ Oops typo, should be: MyArray<T,
boost::mpl::int_<Rank>::prior::value>
... but nonetheless, the problem remains ...
>::type MyArray<T, Rank> :: operator[] (const int& index) throw(); { // Slicing
How about a helper traits class?
template <typename T, int Rank> struct SliceType { typedef typename MyArray<T, Rank-1> type; };
template <typename T> struct SliceType<T,1> { typedef T type; };
template <typename T, int Rank> typename SliceType<T,Rank>::type MyArray<T,Rank> :: operator[] (const int& index) throw();
With a great deal of thanks to Martin, and a few hours sleep, I've got the thing working. ... Sorry for the noise everyone, and in future I'll try not to post anything unless I've been otherwise well rested. Cheers, -- Manfred Doudar MetOcean Engineers www.metoceanengineers.com