次の方法で共有


MatchEventStackInMemberFunction

C++ Build Insights SDK は、Visual Studio 2017 以降と互換性があります。 これらのバージョンのドキュメントを表示するには、この記事の Visual Studio バージョン セレクター コントロールを Visual Studio 2017 以降に設定します。 このページの目次の一番上にあります。

MatchEventStackInMemberFunction 関数は、メンバー関数のパラメーター リストによって記述される特定のイベント階層に対してイベント スタックを照合するために使用されます。 一致した階層は、後続の処理のためにそのメンバー関数に転送されます。 イベント、イベント スタック、階層の詳細については、イベント テーブルに関する記事を参照してください。

構文

template <
    typename     TInterface,
    typename     TReturn,
    typename     T1,
    typename...  TExtraParams,
    typename...  TExtraArgs>
bool MatchEventStackInMemberFunction(
    const EventStack&         eventStack,
    TInterface*               objectPtr,
    TReturn (TInterface::*    memberFunc)(T1, TExtraParams...),
    TExtraArgs&&...           extraArgs);

template <
    typename     TInterface,
    typename     TReturn,
    typename     T1,
    typename     T2,
    typename...  TExtraParams,
    typename...  TExtraArgs>
bool MatchEventStackInMemberFunction(
    const EventStack&         eventStack,
    TInterface*               objectPtr,
    TReturn (TInterface::*    memberFunc)(T1, T2, TExtraParams...),
    TExtraArgs&&...           extraArgs);

// Etc...

template <
    typename     TInterface,
    typename     TReturn,
    typename     T1,
    typename     T2,
    typename     T3,
    typename     T4,
    typename     T5,
    typename     T6,
    typename     T7,
    typename     T8,
    typename     T9,
    typename     T10,
    typename...  TExtraParams,
    typename...  TExtraArgs>
bool MatchEventStackInMemberFunction(
    const EventStack&         eventStack,
    TInterface*               objectPtr,
    TReturn (TInterface::*    memberFunc)(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TExtraParams...),
    TExtraArgs&&...           extraArgs);

パラメーター

TInterface
メンバー関数を含む型。

TReturn
メンバー関数の戻り値の型。

T1, ..., T10
照合するイベント階層が記述されている型。

TExtraParams
メンバー関数によって受け入れられる追加パラメーターの型、およびイベント階層の型。

TExtraArgs
MatchEventStackInMemberFunction に渡された追加の引数の型。

eventStack
T1 から T10 によって記述されるイベントの型の階層と照合するイベント スタック。

objectPtr
memberFunc が呼び出されるオブジェクトへのポインター。

memberFunc
照合するイベント型の階層が記述されているメンバー関数。

extraArgs
イベント型階層のパラメーターと共に memberFunc に完全に転送される引数。

戻り値

正常に一致した場合は true であり、それ以外の場合は false である bool 値。

解説

eventStack の最後のイベントは常に、照合対象のイベント型階層の最後のエントリと照合されます。 イベント型階層の他のすべての型は、同じ順序になっている限り、eventStack 内の最後を除く任意の位置と照合できます。

T1 から T10 パラメーターに使用するイベントの型は、"キャプチャ クラス" のリストから選択します。 照合に使用できるイベントのリストとキャプチャ クラスについては、イベント テーブルに関する記事を参照してください。

void MyClass::Foo1(Compiler cl, BackEndPass bep, C2DLL c2,
    CodeGeneration cg, Thread t, Function f) { }

void MyClass::Foo2(Compiler cl, Function f) { }

void MyClass::Foo3(Thread t, Compiler cl, Function f) { }

void MyClass::Foo4(Compiler cl) { }

void MyClass::OnStartActivity(const EventStack& eventStack)
{
    // Let's assume eventStack contains:
    // [Compiler, BackEndPass, C2DLL, CodeGeneration, Thread, Function]

    bool b1 = MatchEventStackInMemberFunction(
        eventStack, this, &MyClass::Foo1);

    bool b2 = MatchEventStackInMemberFunction(
        eventStack, this, &MyClass::Foo2);

    bool b3 = MatchEventStackInMemberFunction(
        eventStack, this, &MyClass::Foo3);

    bool b4 = MatchEventStackInMemberFunction(
        eventStack, this, &MyClass::Foo4);

    // b1: true because the parameter types of Foo1 match the eventStack
    //     exactly.
    // b2: true because Function is the last entry in both the member
    //     function parameter list and 'eventStack', and also because
    //     Compiler comes before Function in 'eventStack' and in the
    //     parameter type list.
    // b3: false because, even though both Thread and Compiler come
    //     before Function in 'eventStack', the member function parameter
    //     list doesn't list them in the right order.
    // b4: false because the last entry in the member function parameter
    //     list is Compiler, which doesn't match the last entry in 'eventStack'
    //     (Function).
}