名前空間
変種
操作

std::experimental::ranges::Invocable、std::experimental::ranges::RegularInvocable

From cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
 
 
コンセプトライブラリ
中核言語のコンセプト
                              
オブジェクトのコンセプト
                              
                              
比較のコンセプト
呼び出し可能オブジェクトのコンセプト
InvocableRegularInvocable
                                        
                              
URNGコンセプト
 
template< class F, class... Args >

concept bool Invocable =
    requires(F&& f, Args&&... args) {
        ranges::invoke(std::forward<F>(f), std::forward<Args>(args)...);
            /* 等価性を保持する必要はない */

    };
(ranges TS)
template< class F, class... Args >
concept bool RegularInvocable = Invocable<F, Args...>;
(ranges TS)

Invocableコンセプトは、呼び出し可能な型Fが、引数型Args...のセットで、関数テンプレートranges::invokeを使用して呼び出されることを指定します。

RegularInvocableコンセプトは、Invocableコンセプトに加えて、invoke式が等価性を保持し、関数オブジェクトまたは引数を変更しないことを要求します。

[編集] 等価性保持

式が**等価性保持**であるとは、等しい入力に対して等しい出力を生成することを意味します。

  • 式の入力は、そのオペランドで構成されます。
  • 式の出力は、その結果と、式によって変更されたすべてのオペランド(存在する場合)で構成されます。

等価性保持が要求されるすべての式は、さらに**安定**である必要があります。同じ入力オブジェクトでそのような式の2回の評価は、これらの入力オブジェクトの明示的な介入的な変更がない限り、等しい出力を持ちます。

特に断りがない限り、requires-expression で使用されるすべての式は、等価性を保持し、安定であることが要求され、式の評価は定数でないオペランドのみを変更できます。定数のオペランドは変更してはいけません。

[編集] 注記

InvocableRegularInvocableの区別は純粋に意味論的なものです。

乱数ジェネレーターはInvocableを満たすかもしれませんが、RegularInvocableを満たすことはできません(コミカルなものを除く)。

English 日本語 中文(简体) 中文(繁體)