Ich habe eine operator<<
Spezialisierung geschrieben, die boost::multi_array
verarbeitet und ConstMultiArrayConcept
verwendet, so dass sie sowohl auf dem äußeren Array als auch auf den Sub-Arrays funktioniert. Ich frage mich jedoch, warum die multi_array
-Konzepte ein std::size_t NumDims
Template-Argument haben, da das einfach aus dem multi_array
extrahiert werden kann. Die einzige Verwendung von NumDims
in ConstMultiArrayConcept
ist eine Rekursionstiefe arg für idgen_helper
, die das Slicing testet.
Hier ist der Header für multi_array
concepts:
Ссылка
Und hier ist meine überladene operator<<
Diese Spezialisierung funktioniert, aber ich muss etwas in meinem Verständnis vermissen. Irgendwelche Hinweise werden geschätzt.
Deklaration der Konzeptvorlagenklasse:
%Vor% Siehe, wie ConstMultiArrayConcept
tatsächlich im Boost-Code verwendet wird:
Derselbe Code in multi_array_view& operator=()
und sub_array& operator=()
, die andere ConstMultiArray
-Typen verwenden.
Sieht aus wie NumDims
ist nicht Dimensionsnummer des übergebenen Array-Typs Array
, es ist die Dimensionsnummer des äußeren Array-Typs, die die Zuordnungskompatibilität mit dem angegebenen anderen Array-Typ überprüft. Es konnte also nicht aus dem Parameter Array
template abgeleitet werden.
Tags und Links c++ boost c++-concepts boost-multi-array