Gibt es einen Standardnamen (Vorlage oder Makro), um ARRAY_SIZE, _countof usw. zu ersetzen?

8

Ich spreche nicht von std::array oder irgendetwas, nur klassische Vanille C / C ++ - Arrays. Ich bin mir der verschiedenen Möglichkeiten bewusst, wie ARRAY_SIZE / _countof implementiert werden könnte. Ich frage mich nur, ob es ihnen gelungen ist, einen Namen dafür zu standardisieren (unter std:: nehme ich an). Wenn nicht, gibt es einen Vorschlag dafür?

    
VoidStar 16.03.2015, 04:26
quelle

1 Antwort

9

Aktuelle Problemumgehung

std :: excellence - die Größe von Arrays

Wenn Sie mit nativen Arrays arbeiten, können Sie std::extent von <type_traits> verwenden wird verwendet, um die Anzahl der Elemente in der N-ten Dimension eines Arrays (standardmäßig die erste) zu erhalten.

%Vor%

Ein wenig Indirektion (generische Lösung, nicht nur Arrays)

Es gibt keinen einzigen Namen, der als Ersatz für das, was Sie beschreiben, dienen kann, aber da C ++ 11 kann man std::begin und std::end um Iteratoren für eine geeignete Entität zu erhalten, und zusammen mit std::distance haben Sie einen "hervorragenden" Weg die Größe von etwas zu bekommen, das die geeigneten Qualitäten hat.

%Vor%


Der Nachteil der obigen Lösung ist, dass keine der drei Funktionen constexpr in C ++ 11 ist, und selbst in C ++ 14 std::distance ist immer noch nicht constexpr ( die anderen zwei sind).

Dies bedeutet, dass die Lösung nicht in Kontexten verwendet werden kann, die einen Konstantenausdruck erfordern.

Wenn Sie sicher sind, dass Sie mit einer Entität arbeiten, die RandomAccessIterators bereitstellt, können Sie die Problemumgehung umgehen, indem Sie std::end (e) - std::begin(e) verwenden, wenn ein constant-expression erforderlich ist ( C ++ 14 ).

Blick in die Zukunft

N4280 schlägt vor, dass wir std::size zur Standardbibliothek hinzufügen, was genau das ist, wonach Sie suchen .

%Vor%

Wenn alles wie geplant läuft, werden wir es in C ++ 17 haben.

    
Filip Roséen - refp 16.03.2015, 10:28
quelle

Tags und Links