Sdílet prostřednictvím


MatchEventStack

Sada C++ Build Insights SDK je kompatibilní se sadou Visual Studio 2017 a novějšími verzemi. Pokud chcete zobrazit dokumentaci k těmto verzím, nastavte ovládací prvek selektoru verzí sady Visual Studio pro tento článek na Visual Studio 2017 nebo novější. Nachází se v horní části obsahu na této stránce.

Funkce MatchEventStack se používá ke shodě zásobníku událostí s konkrétní hierarchií událostí. Odpovídající hierarchie se předávají obslužné rutině pro další zpracování. Další informace o událostech, zásobníkech událostí a hierarchiích najdete v tabulce událostí.

Syntaxe

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

Parametry

TEvent
Typ nejstaršího nadřazeného objektu, který se má shodovat v zásobníku událostí.

TEvents
Zbývající typy, které chcete spárovat v zásobníku událostí.

TCallable
Typ, který podporuje operator(). Další informace o tom, které argumenty se předají tomuto operátoru, naleznete v popisu volatelného parametru.

TExtraArgs
Typy nadbytečných argumentů předaných MatchEventStack.

eventStack
Zásobník událostí, který se má shodovat s hierarchií typů událostí, kterou popisuje TEvent a TEvents.

vypověditelný
Po úspěšném spárování zásobníku událostí s hierarchií typů událostí, kterou popisuje TEvent a TEvents, MatchEventStack vyvolá volání. Předává volatelný jeden argument r-hodnota pro každý typ v hierarchii událostí. Balíček parametrů extraArgs je dokonale přesměrovaný ve zbývajících parametrech volatelných.

extraArgs
Argumenty, které jsou dokonale přesměrované tak, aby volaly spolu s odpovídajícím typem události.

Návratová hodnota

Hodnota bool , která je true v případě, že byla shoda úspěšná, nebo false jinak.

Poznámky

Poslední událost v eventStacku se vždy shoduje s poslední položkou v seznamu typů [TEvent, TEvents...]. Všechny ostatní položky TEvent a TEvents se můžou shodovat s libovolnou pozicí v eventStacku s výjimkou posledního, pokud jsou ve stejném pořadí.

Typy událostí, které se mají použít pro parametry TEvent a TEvents, jsou vybrány ze seznamu tříd zachycení. Seznam událostí a třídy zachycení, které můžete použít k jejich spárování, najdete v tabulce událostí.

Příklad

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