mFrame
載入中...
搜尋中...
無符合項目
ufm::util::Span< T > 類別 樣版 參考文件

輕量級連續記憶體區域包裝器,提供對陣列或記憶體片段的非擁有性引用 更多...

#include <Span.h>

類別ufm::util::Span< T >的繼承圖:
ufm::lang::Object ufm::lang::Iterable< T > ufm::lang::Interface

公開方法(Public Methods)

 Span (T const *data, size_t size) noexcept
 從指針和大小構造 Span 對象
 
template<size_t N>
 Span (T const (&data)[N]) noexcept
 從固定大小陣列構造 Span 對象
 
virtual ~Span (void) override
 虛擬解構函數
 
 Span (const Span &other) noexcept=default
 複製建構函式
 
Spanoperator= (const Span &other) noexcept=default
 複製賦值操作符
 
 Span (Span &&other) noexcept=default
 移動建構函式
 
Spanoperator= (Span &&other) noexcept=default
 移動賦值操作符
 
virtual void forEach (ufm::func::Consumer< T & > &action) override
 Span 中的每個元素執行指定操作
 
virtual T * elementAt (int index) const override
 獲取指定索引處的元素指針
 
virtual int nextIndex (int index) const override
 返回當前索引的下一個有效索引。
 
virtual ufm::util::Iterator< T > begin (void) override
 獲取指向集合開始的迭代器
 
virtual ufm::util::Iterator< T > end (void) override
 獲取指向集合結尾的迭代器
 
size_t size (void) const noexcept
 獲取 Span 包含的元素數量
 
bool empty (void) const noexcept
 檢查 Span 是否為空
 
T const * data (void) const noexcept
 獲取指向數據起始位置的指針
 
T const & operator[] (size_t index) const noexcept
 安全的陣列下標操作符
 
- 公開方法(Public Methods) 繼承自 ufm::lang::Object
void * operator new (size_t n)
 使用運算子 new 分配記憶體
 
void * operator new (size_t n, void *p)
 在指定記憶體上調用運算子 new
 
virtual ufm::lang::ObjectgetObject (void) override
 取得對應的 Object 物件
 
void delay (int milliseconds) const
 延遲指定的毫秒數進行執行緒等待
 
bool equals (Object *object) const
 判斷與另一物件是否為相同參照(指標型態比較)
 
bool equals (Object &object) const
 判斷與另一物件是否為相同參照(參照型態比較)
 
void wait (void) const
 使當前線程等待直到被通知
 
bool wait (int timeout) const
 等待通知或超時
 
bool yield (void) const
 讓執行緒讓渡控制權給同優先權的下一個執行緒
 
int lock (void) const
 核心鎖定,鎖定期間禁止線程切換
 
int unlock (void) const
 核心解鎖
 
ufm::sys::ThreadcurrentThread (void) const
 取得當前執行緒指標
 
virtual int hashcode (void) const
 返回對象的哈希碼值。支持這種方法是為了散列表,如HashMap提供的那樣。
 
- 公開方法(Public Methods) 繼承自 ufm::lang::Interface
virtual ~Interface (void)=default
 虛擬析構函式
 

詳細描述

template<typename T>
class ufm::util::Span< T >

輕量級連續記憶體區域包裝器,提供對陣列或記憶體片段的非擁有性引用

樣版參數
T元素類型

Span 類別提供了一個類型安全的方式來操作連續記憶體中的數據,類似於 C++20 的 std::span。 它不擁有記憶體,僅持有指向數據的指針和大小資訊。

主要特性:

  • 非擁有性:不負責記憶體的分配和釋放
  • 類型安全:提供強類型檢查
  • 迭代支援:實現 Iterable 介面,支援範圍迭代
  • 邊界檢查:提供安全的元素存取
警告
使用者必須確保被引用的記憶體在 Span 生命週期內保持有效
範例
F:/mframe/doxy-document/src/mframe/src/ufm/util/Span.h.

建構子與解構子說明文件

◆ Span() [1/4]

template<typename T >
ufm::util::Span< T >::Span ( T const * data,
size_t size )
inlinenoexcept

從指針和大小構造 Span 對象

參數
data指向數據起始位置的指針,不能為空
size數據區域包含的元素數量
例外
不拋出異常(noexcept)
構造函數不會複製數據,僅保存指針引用
警告
呼叫者必須確保 data 指向的記憶體在 Span 生命週期內有效
範例
F:/mframe/doxy-document/src/mframe/src/ufm/util/Span.h.

◆ Span() [2/4]

template<typename T >
template<size_t N>
ufm::util::Span< T >::Span ( T const (&) data[N])
inlinenoexcept

從固定大小陣列構造 Span 對象

樣版參數
N陣列大小,由編譯器自動推導
參數
data固定大小陣列的引用
例外
不拋出異常(noexcept)

此建構函式允許從堆疊陣列直接創建 Span,編譯器會自動推導陣列大小。

int arr[5] = {1, 2, 3, 4, 5};
Span<int> span(arr); // 自動推導大小為 5
輕量級連續記憶體區域包裝器,提供對陣列或記憶體片段的非擁有性引用
Definition Span.h:50

◆ ~Span()

template<typename T >
virtual ufm::util::Span< T >::~Span ( void )
inlineoverridevirtual

虛擬解構函數

由於 Span 不擁有數據,解構時不執行任何清理操作

範例
F:/mframe/doxy-document/src/mframe/src/ufm/util/Span.h.

◆ Span() [3/4]

template<typename T >
ufm::util::Span< T >::Span ( const Span< T > & other)
defaultnoexcept

複製建構函式

參數
other要複製的另一個 Span 對象

由於 Span 僅包含指針和大小,複製操作是淺複製。 兩個 Span 對象將引用相同的底層數據。

◆ Span() [4/4]

template<typename T >
ufm::util::Span< T >::Span ( Span< T > && other)
defaultnoexcept

移動建構函式

參數
other要移動的另一個 Span 對象

由於 Span 是輕量級對象,移動與複製操作相同。

函式成員說明文件

◆ begin()

template<typename T >
virtual ufm::util::Iterator< T > ufm::util::Span< T >::begin ( void )
inlineoverridevirtual

獲取指向集合開始的迭代器

傳回值
ufm::util::Iterator<T> 指向第一個元素的迭代器

返回用於範圍迭代的開始迭代器,支援 C++ 範圍 for 循環。

實作 ufm::lang::Iterable< T >.

範例
F:/mframe/doxy-document/src/mframe/src/ufm/util/Span.h.

◆ data()

template<typename T >
T const * ufm::util::Span< T >::data ( void ) const
inlinenoexcept

獲取指向數據起始位置的指針

傳回值
T const* 指向第一個元素的常量指針

直接存取底層數據指針,可用於與 C 風格 API 互操作。

警告
返回的指針僅在 Span 生命週期內有效
範例
F:/mframe/doxy-document/src/mframe/src/ufm/util/Span.h.

◆ elementAt()

template<typename T >
virtual T * ufm::util::Span< T >::elementAt ( int index) const
inlineoverridevirtual

獲取指定索引處的元素指針

參數
index要獲取的元素索引(0-based)
傳回值
T* 指向指定索引處元素的指針,若索引無效則返回 nullptr

提供邊界檢查的安全元素存取。索引超出範圍時返回空指針而非拋出異常。

返回的指針允許修改元素值,儘管 Span 本身持有常量數據

實作 ufm::lang::Iterable< T >.

範例
F:/mframe/doxy-document/src/mframe/src/ufm/util/Span.h.

◆ empty()

template<typename T >
bool ufm::util::Span< T >::empty ( void ) const
inlinenoexcept

檢查 Span 是否為空

傳回值
bool 如果 Span 不包含任何元素則返回 true
範例
F:/mframe/doxy-document/src/mframe/src/ufm/util/Span.h.

◆ end()

template<typename T >
virtual ufm::util::Iterator< T > ufm::util::Span< T >::end ( void )
inlineoverridevirtual

獲取指向集合結尾的迭代器

傳回值
ufm::util::Iterator<T> 指向末尾後一位的迭代器

返回用於範圍迭代的結尾迭代器,支援 C++ 範圍 for 循環。

實作 ufm::lang::Iterable< T >.

範例
F:/mframe/doxy-document/src/mframe/src/ufm/util/Span.h.

◆ forEach()

template<typename T >
virtual void ufm::util::Span< T >::forEach ( ufm::func::Consumer< T & > & action)
inlineoverridevirtual

Span 中的每個元素執行指定操作

參數
action對每個元素執行的操作函數

遍歷 Span 中所有元素,對每個元素執行指定操作。 若所有元素處理完畢或操作中發生異常則停止。

當操作導致底層資料源發生變動時(未同步處理),其行為未定義。

雖然 Span 持有常量數據,但此方法將常量性移除以符合 Iterable 介面
警告
請謹慎修改元素,因為可能影響原始數據

實作 ufm::lang::Iterable< T >.

範例
F:/mframe/doxy-document/src/mframe/src/ufm/util/Span.h.

◆ nextIndex()

template<typename T >
virtual int ufm::util::Span< T >::nextIndex ( int index) const
inlineoverridevirtual

返回當前索引的下一個有效索引。

參數
index當前索引
傳回值
int 下一個有效索引

如果當前索引已經是最後一個元素,則返回 -1。 如果當前索引無效(如 -1),則返回 0

實作 ufm::lang::Iterable< T >.

範例
F:/mframe/doxy-document/src/mframe/src/ufm/util/Span.h.

◆ operator=() [1/2]

template<typename T >
Span & ufm::util::Span< T >::operator= ( const Span< T > & other)
defaultnoexcept

複製賦值操作符

參數
other要複製的另一個 Span 對象
傳回值
Span& 返回此對象的引用

執行淺複製,更新當前 Span 以引用與 other 相同的數據。

範例
F:/mframe/doxy-document/src/mframe/src/ufm/util/Span.h.

◆ operator=() [2/2]

template<typename T >
Span & ufm::util::Span< T >::operator= ( Span< T > && other)
defaultnoexcept

移動賦值操作符

參數
other要移動的另一個 Span 對象
傳回值
Span& 返回此對象的引用

◆ operator[]()

template<typename T >
T const & ufm::util::Span< T >::operator[] ( size_t index) const
inlinenoexcept

安全的陣列下標操作符

參數
index要存取的元素索引
傳回值
T const& 指定索引處元素的常量引用
例外
當索引超出範圍時行為未定義(除錯版本可能觸發斷言)

提供類似陣列的存取語法,但不進行邊界檢查以保持性能。 如需安全存取,請使用 elementAt() 方法。

範例
F:/mframe/doxy-document/src/mframe/src/ufm/util/Span.h.

◆ size()

template<typename T >
size_t ufm::util::Span< T >::size ( void ) const
inlinenoexcept

獲取 Span 包含的元素數量

傳回值
size_t 元素數量

返回此 Span 引用的數據區域中包含的元素個數。

範例
F:/mframe/doxy-document/src/mframe/src/ufm/util/Span.h.

此類別(class) 文件是由下列檔案中產生: