MatchEventStack

O SDK do C++ Build Insights é compatível com o Visual Studio 2017 e posterior. Para ver a documentação dessas versões, defina o controle seletor de Versão do Visual Studio deste artigo para o Visual Studio 2017 ou posterior. Ele é encontrado na parte superior da tabela de conteúdo nesta página.

A função MatchEventStack é usada para corresponder a uma pilha de eventos com uma hierarquia de eventos específica. As hierarquias correspondentes são encaminhadas para um manipulador para processamento adicional. Para saber mais sobre eventos, pilhas de eventos e hierarquias, confira a tabela de eventos.

Sintaxe

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

Parâmetros

Ventilação
O tipo do pai mais velho a ser correspondido na pilha de eventos.

TEvents
Os tipos restantes que você deseja corresponder na pilha de eventos.

TCallable
Um tipo que dá suporte a operator(). Para obter mais informações sobre quais argumentos são passados para esse operador, consulte a descrição do parâmetro callable.

TExtraArgs
Os tipos dos argumentos adicionais passados para MatchEventStack.

eventStack
A pilha de eventos a ser correspondida com a hierarquia de tipos de evento descrita por TEvent a TEvents.

callable
Após a correspondência com êxito da pilha de eventos com a hierarquia de tipo de evento descrita por TEvent e TEvents, MatchEventStack invoca callable. Ele passa para um argumento de r-value callable para cada tipo na hierarquia de eventos. O pacote de parâmetros extraArgs é encaminhado perfeitamente nos parâmetros restantes do callable.

extraArgs
Os argumentos que são encaminhados perfeitamente para callable juntamente com o tipo de evento correspondente.

Valor de Devolução

Um valor bool que é true quando há correspondência ou false quando não há.

Comentários

O último evento em eventStack sempre é correspondente à última entrada na lista de tipos concatenados [TEvent, TEvents...]. Todas as outras entradas TEvent e TEvents podem corresponder a qualquer posição em eventStack, exceto a última, desde que estejam na mesma ordem.

Os tipos de evento a serem usados para os parâmetros TEvent e TEvents são selecionados em uma lista de classes de captura. Para obter uma lista de eventos e as classes de captura que você pode usar para combiná-los, consulte a tabela de eventos.

Exemplo

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