Dela via


MatchEventStackInMemberFunction

C++ Build Insights SDK är kompatibelt med Visual Studio 2017 och senare. Om du vill se dokumentationen för dessa versioner, ställ in Väljarkontrollen för Visual Studio Version i den här artikeln på Visual Studio 2017 eller senare. Den finns överst i innehållsförteckningen på den här sidan.

Funktionen MatchEventStackInMemberFunction används för att matcha en händelsestack mot en specifik händelsehierarki, som beskrivs i parameterlistan för en medlemsfunktion. Matchade hierarkier vidarebefordras till medlemsfunktionen för vidare bearbetning. Mer information om händelser, händelsestackar och hierarkier finns i händelsetabellen.

Syntax

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);

Parameterar

TInterface
Den typ som innehåller medlemsfunktionen.

TReturn
Returtypen för medlemsfunktionen.

T1, ..., T10
De typer som beskriver en händelsehierarki som ska matchas.

TExtraParams
Typerna av extra parametrar som accepteras av medlemsfunktionen och händelsehierarkityperna.

TExtraArgs
De typer av extra argument som skickades till MatchEventStackInMemberFunction.

eventStack
Händelsestacken som ska matchas mot händelsetypshierarkin som beskrivs av T1 till T10.

objectPtr
En pekare till ett objekt där memberFunc anropas.

memberFunc
Medlemsfunktionen som beskriver hierarkin av händelsetyper som ska matchas.

extraArgs
Argumenten som vidarebefordras perfekt till memberFunc tillsammans med hierarkiparametrarna för händelsetyp.

Returvärde

Ett bool värde som är true om matchningen lyckades eller false på annat sätt.

Anmärkningar

Den sista händelsen i eventStack matchas alltid mot den sista posten i händelsetypshierarkin som ska matchas. Alla andra typer i händelsetypshierarkin kan matcha valfri position i eventStack förutom den sista, förutsatt att de är i samma ordning.

Händelsetyper som ska användas för parametrarna T1 till T10 väljs från en lista över avbildningsklasser. En lista över händelser och de avbildningsklasser som du kan använda för att matcha dem finns i händelsetabellen.

Exempel

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).
}