名稱空間
變體
操作

C++ 命名要求: RangeAdaptorObject (自 C++20 起)

來自 cppreference.com
 
 
C++ 命名要求
基本
型別屬性
全庫範圍
(C++11)




Container(容器)
容器元素
迭代器 (Iterator)
流 I/O
格式化器
(C++20)
隨機數
併發
(C++11)
Ranges
RangeAdaptorObject(範圍介面卡物件)
(C++20)
多維檢視
(C++23)
其他

 

範圍介面卡物件是定製點物件,它們接受viewable_range作為它們的第一個引數,並返回一個view。一些範圍介面卡物件是一元的,即它們只接受一個viewable_range作為它們唯一的引數。其他範圍介面卡物件接受一個viewable_range和其他的尾隨引數。

如果一個範圍介面卡物件只接受一個引數,它也是一個RangeAdaptorClosureObject

如果一個範圍介面卡物件接受多個引數,它也支援部分應用:令

  • a是這樣一個範圍介面卡物件,並且
  • args...是引數(通常適用於尾隨引數),

表示式a(args...)具有以下屬性

  • 它僅當args...中的每個引數e(其中Edecltype((e)))滿足std::is_constructible_v<std::decay_t<E>, E>true時才有效,
  • 當呼叫有效時,其結果物件儲存一個型別為std::decay_t<E>的子物件,對於args...中的每個引數e,該子物件透過std::forward<E>(e)進行直接非列表初始化(換句話說,範圍介面卡物件透過值繫結引數),
  • 結果物件是一個RangeAdaptorClosureObject
  • 呼叫RangeAdaptorClosureObject會將繫結的引數(如果有)轉發到關聯的範圍介面卡物件。繫結的引數(如果有)被視為具有RangeAdaptorClosureObject的值類別和cv限定。 換句話說,a(args...)(r)等價於std::bind_back(a, args...)(r)(但前者也支援管道語法)。(自 C++23 起)

像其他定製點物件一樣,令

  • a是任何範圍介面卡物件型別經cv-unqualified後的物件,
  • args...是滿足a的型別中operator()約束的任意一組引數,

對以下表達式的呼叫

都等價。

這些表示式的結果物件要麼是view物件,要麼是RangeAdaptorClosureObject

[編輯] 注意

範圍介面卡物件型別的volatile-qualified或const-volatile-qualified版本不支援operator()。陣列和函式在繫結時會轉換為指標。