2017-07-19 2 views
4

Die C++ - Kernrichtlinien erwähnen Spannen, nicht "Multi-Spannen". Aber - ich sehe, dass GSL Implementierung von Microsoft ein so multi_span classWozu soll gsl :: multi_span verwendet werden?

template < 
    typename ValueType, 
    std::ptrdiff_t FirstDimension, 
    std::ptrdiff_t... RestDimensions 
> 
class multi_span { ... }; 

hat, offensichtlich ist dies eine Art von einer mehrdimensionalen Version von gsl::span. Aber was soll das heißen? Warum brauchen wir diese mehrdimensionale Spannweite oder vielmehr - wann würden wir sie verwenden? Ich kann keine Dokumentation dazu finden.

Antwort

3

Kurz gesagt, es ist eine Spanne über zusammenhängende Stück Speicher, die mehrdimensionale Array darstellt. Hier

ist ein Beispiel für die Verwendung:

int data[6] = {0, 1, 2, 3, 4, 5}; 
multi_span<int, 2, 3> span{data, 6}; 
std::cout << span[1][1] << '\n'; //Outputs 4 

aus der verknüpften Quelle, wie es scheint, dass es auch Laufzeit Grenzen unterstützt, aber ich bin mir nicht sicher über die richtige Syntax für die.

+0

Ich frage mich, warum brauchen wir eine separate Klasse dafür? Es scheint, dass es möglich ist, "span" so zu gestalten, dass es sowohl für eine als auch für mehrere Dimensionen anwendbar ist. – Mikhail

+1

@Michail es ist nicht in GSL, es ist eine eigene Erweiterung von Microsoft. Wahrscheinlich gab es keinen Konsens darüber, wie multidimensionale Spannen implementiert werden sollten, oder es gab einige Probleme mit ihnen, so dass sie nicht zu GSL wurden. Anscheinend entschied Microsoft, dass es sie immer noch will, oder rollte eigene Proof-of-Concept-Implementierung zum Testen, um die bestehende Spannungsklasse nicht zu brechen, machte sie eine neue. –

Verwandte Themen