Warum hat boost :: multi_arrays ConstMultiArrayConcept ein NumDims-Template-Argument?

8

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<<

%Vor%

Diese Spezialisierung funktioniert, aber ich muss etwas in meinem Verständnis vermissen. Irgendwelche Hinweise werden geschätzt.

    
Stonewall Ballard 28.08.2012, 16:40
quelle

1 Antwort

1

Deklaration der Konzeptvorlagenklasse:

%Vor%

Siehe, wie ConstMultiArrayConcept tatsächlich im Boost-Code verwendet wird:

%Vor%

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.

    
Rost 12.11.2012 15:13
quelle