Udostępnij za pośrednictwem


MatchEventStack

Zestaw SDK usługi Build Insights języka C++ jest zgodny z programem Visual Studio 2017 lub nowszym. Aby zapoznać się z dokumentacją dla tych wersji, ustaw kontrolkę selektora wersji programu Visual Studio dla tego artykułu na program Visual Studio 2017 lub nowszy. Znajduje się on w górnej części spisu treści na tej stronie.

Funkcja MatchEventStack służy do dopasowywania stosu zdarzeń do określonej hierarchii zdarzeń. Dopasowane hierarchie są przekazywane do programu obsługi w celu dalszego przetwarzania. Aby dowiedzieć się więcej o zdarzeniach, stosach zdarzeń i hierarchiach, zobacz tabelę zdarzeń.

Składnia

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

Parametry

TEvent
Typ najstarszego elementu nadrzędnego do dopasowania w stosie zdarzeń.

TEvents
Pozostałe typy, które chcesz dopasować w stosie zdarzeń.

Funkcja TCallable
Typ, który obsługuje operator()element . Aby uzyskać więcej informacji o tym, które argumenty są przekazywane do tego operatora, zobacz opis parametru z możliwością wywołania .

TExtraArgs
Typy dodatkowych argumentów przekazanych do MatchEventStackklasy .

eventStack
Stos zdarzeń zgodny z hierarchią typów zdarzeń opisaną przez TEvent i TEvents.

Nieopłacona
Po pomyślnym dopasowaniu stosu zdarzeń z hierarchią typów zdarzeń opisaną przez TEvent i TEvents MatchEventStack wywołania można wywołać. Przekazuje do wywołania jednego argumentu r-value dla każdego typu w hierarchii zdarzeń. Pakiet parametrów extraArgs jest idealnie przekazywany w pozostałych parametrach wywoływania.

extraArgs
Argumenty, które są idealnie przekazywane do wywołania wraz z dopasowanym typem zdarzenia.

Wartość zwracana

bool Wartość, która jest true w przypadku pomyślnego dopasowania lub false w inny sposób.

Uwagi

Ostatnie zdarzenie w aplikacji eventStack jest zawsze dopasowywane do ostatniego wpisu na liście typów TEvent [TEvent, TEvents...]. Wszystkie inne wpisy TEvent i TEvents mogą być zgodne z dowolną pozycją w usłudze eventStack z wyjątkiem ostatnich, pod warunkiem, że są one w tej samej kolejności.

Typy zdarzeń do użycia dla parametrów TEvent i TEvents są wybierane z listy klas przechwytywania. Aby uzyskać listę zdarzeń i klas przechwytywania, których można użyć do ich dopasowania, zobacz tabelę zdarzeń.

Przykład

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