を処理するoperator<<
特殊化を作成し、外側の配列とサブ配列の両方で機能するようにboost::multi_array
使用しました。しかし、なぜ概念にテンプレート引数があるConstMultiArrayConcept
のか 疑問に思っています。それは. inの唯一の用途は、スライスをテストするの再帰の深さの引数としてです。multi_array
std::size_t NumDims
multi_array
NumDims
ConstMultiArrayConcept
idgen_helper
multi_array
参考までに、概念
のヘッダーは次のとおりです。 http://www.boost.org/doc/libs/1_51_0/boost/multi_array/concept_checks.hpp
そして、これが私の過負荷ですoperator<<
template <typename CharT, typename Traits, typename MultiArrayT>
BOOST_CONCEPT_REQUIRES(
((boost::multi_array_concepts::ConstMultiArrayConcept<MultiArrayT, MultiArrayT::dimensionality>)),
(std::basic_ostream<CharT, Traits>&)) // return type
operator <<( std::basic_ostream<CharT, Traits>& os, MultiArrayT const& ary )
{
typename std::basic_ostream<CharT, Traits>::sentry opfx( os );
if ( opfx ) {
boost::multi_array_types::size_type const* sizes = ary.shape();
// using Mathematica array notation
os << "{";
for ( int i = 0; i < sizes[0]; ++i ) {
if ( i > 0 ) os << ", ";
// verbose just to keep the types apparent
typedef typename MultiArrayT::const_reference subType;
subType item = ary[i];
os << item;
}
os << "}\n";
}
return os;
}
この専門化は機能しますが、私の理解では何かが欠けているに違いありません。手がかりをいただければ幸いです。