我写了一个operator<<
专业化处理boost::multi_array
,并使用ConstMultiArrayConcept
,以便它可以在外部数组和子数组上工作。不过,我想知道为什么multi_array
概念有一个std::size_t NumDims
模板参数,因为它可以从multi_array
中简单提取。 ConstMultiArrayConcept
中的NumDims
的唯一用途是作为测试分片的idgen_helper
的递归深度参数。为什么boost :: multi_array的ConstMultiArrayConcept有一个NumDims模板参数?
仅供参考,以下是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;
}
这种专业化的工作,但我必须失去在我的理解的东西。任何线索将不胜感激。