0 Tage Serie
cpp / expert
Snippet

Bounds-Checked Span-Implementierung für Rohpuffer

Dieses Snippet zeigt eine Experten-Implementierung eines nicht-besitzenden Array-Views (ähnlich zu std::span). Es bietet eine sichere Schnittstelle für Rohpuffer, indem es Pointer und Größe kapselt und sowohl geprüfte als auch ungeprüfte Zugriffsmuster zur Performance-Optimierung anbietet.

snippet.cpp
cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdexcept>
#include <cstddef>
template <typename T>
class View {
T* ptr;
size_t sz;
public:
constexpr View(T* data, size_t count) : ptr(data), sz(count) {}
constexpr T& at(size_t index) const {
if (index >= sz) throw std::out_of_range("View access out of bounds");
return ptr[index];
}
constexpr T& operator[](size_t index) const noexcept {
return ptr[index]; // Fast access, no check
}
size_t size() const noexcept { return sz; }
};
Erklärung
1
if (index >= sz) throw std::out_of_range(...);
Implementiert eine Laufzeit-Grenzwertprüfung, um die Speichersicherheit beim Pufferzugriff zu gewährleisten.
2
T& operator[](size_t index) const noexcept
Bietet einen hochperformanten, ungeprüften Zugriffsoperator für den Einsatz in kritischen Code-Pfaden, in denen die Sicherheit extern garantiert wird.