मैंने operator<<
विशेषज्ञता लिखा है जो boost::multi_array
को संभालता है, और ConstMultiArrayConcept
का उपयोग करता है ताकि यह बाहरी सरणी और उप-सरणी दोनों पर काम करेगा। मैं सोच रहा हूं, हालांकि, multi_array
अवधारणाओं में std::size_t NumDims
टेम्पलेट तर्क क्यों है, क्योंकि इसे multi_array
से निकाला जा सकता है। में NumDims
का एकमात्र उपयोग idgen_helper
के लिए रिकर्सन गहराई तर्क के रूप में है, जो स्लाइसिंग का परीक्षण करता है।बढ़ावा क्यों देता है :: 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;
}
इस विशेषज्ञता में काम करता है, लेकिन मैं मेरी समझ में कुछ कमी की जानी चाहिए। किसी भी सुराग की सराहना की जाएगी। अवधारणा टेम्पलेट वर्ग के