C++ 命名要求: RangeAdaptorObject (自 C++20 起)
來自 cppreference.com
範圍介面卡物件是定製點物件,它們接受viewable_range
作為它們的第一個引數,並返回一個view
。一些範圍介面卡物件是一元的,即它們只接受一個viewable_range
作為它們唯一的引數。其他範圍介面卡物件接受一個viewable_range
和其他的尾隨引數。
如果一個範圍介面卡物件只接受一個引數,它也是一個RangeAdaptorClosureObject。
如果一個範圍介面卡物件接受多個引數,它也支援部分應用:令
- a是這樣一個範圍介面卡物件,並且
- args...是引數(通常適用於尾隨引數),
表示式a(args...)具有以下屬性
- 它僅當args...中的每個引數e(其中
E
是decltype((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()約束的任意一組引數,
對以下表達式的呼叫
- a(args...),
- std::as_const(a)(args...),
- std::move(a)(args...),以及
- std::move(std::as_const(a))(args...)
都等價。
這些表示式的結果物件要麼是view
物件,要麼是RangeAdaptorClosureObject。
[編輯] 注意
範圍介面卡物件型別的volatile-qualified或const-volatile-qualified版本不支援operator()。陣列和函式在繫結時會轉換為指標。