Dela via


MatchEventStack

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 MatchEventStack används för att matcha en händelsestack mot en specifik händelsehierarki. Matchade hierarkier vidarebefordras till en hanterare för vidare bearbetning. Mer information om händelser, händelsestackar och hierarkier finns i händelsetabellen.

Syntax

template <
    typename          TEvent,
    typename...       TEvents,
    typename          TCallable,
    typename...       TExtraArgs>
bool MatchEventStack(
    const EventStack& eventStack,
    TCallable&&       callable,
    TExtraArgs&&...   extraArgs);

Parameterar

TEvent
Typen på den äldsta föräldern som ska matchas i händelsestack.

TEvents
De återstående typerna som du vill matcha i händelsestacken.

TCallable
En typ som stöder operator(). Mer information om vilka argument som skickas till den här operatorn finns i beskrivningen av den anropbara parametern.

TExtraArgs
Typerna av extra argument som skickas till MatchEventStack.

eventStack
Händelsestacken som ska matchas mot händelsetypshierarkin som beskrivs av TEvent och TEvents.

Inlösbara
När händelsestacken framgångsrikt matchas med den händelsetyshierarki som beskrivs av TEvent och TEvents, anropas MatchEventStackanropsbar. Det skickas till ett anropsbart R-värde-argument för varje typ i händelsehierarkin. Parameterpaketet extraArgs vidarebefordras perfekt i de återstående parametrarna för callable.

extraArgs
Argumenten som vidarebefordras perfekt till anropsbara tillsammans med den matchade händelsetypen.

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 den sammanfogade [TEvent, TEvents...] typlistan. Alla andra TEvent och TEvents 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 TEvent och TEvents 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::OnStartActivity(const EventStack& eventStack)
{
    // Let's assume eventStack contains:
    // [Compiler, BackEndPass, C2DLL, CodeGeneration, Thread, Function]

    bool b1 = MatchEventStack<Compiler, BackEndPass, C2DLL,
                CodeGeneration, Thread, Function>(
        eventStack, [](Compiler cl, BackEndPass bep, C2DLL c2,
            CodeGeneration cg, Thread t, Function f){ /* Do something ... */ });

    bool b2 = MatchEventStack<Compiler, Function>(
        eventStack, [](Compiler cl, Function f){ /* Do something... */ });

    bool b3 = MatchEventStack<Thread, Compiler, Function>(
        eventStack, [](Thread t, Compiler cl Function f){ /* Do something... */ });

    bool b4 = MatchEventStack<Compiler>(
        eventStack, [](Compiler cl){ /* Do something... */ });


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