Share via


MatchEventStack

El SDK de C++ Build Insights es compatible con Visual Studio 2017 y versiones posteriores. Para ver la documentación de estas versiones, establezca el control de selector de Versión de Visual Studio para este artículo en Visual Studio 2017 o versiones posteriores. Se encuentra en la parte superior de la tabla de contenido de esta página.

La función MatchEventStack se usa para comparar una pila de eventos con una jerarquía de eventos específica. Las jerarquías coincidentes se reenvían a un controlador para su posterior procesamiento. Para obtener más información sobre eventos, pilas de eventos y jerarquías, vea la tabla de eventos.

Sintaxis

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

Parámetros

TEvent
Tipo del elemento primario más antiguo que se va a comparar en la pila de eventos.

TEvents
Tipos restantes que desea comparar en la pila de eventos.

TCallable
Tipo que admite operator(). Para obtener más información sobre qué argumentos se pasan a este operador, vea la descripción del parámetro callable.

TExtraArgs
Tipos de los argumentos adicionales pasados a MatchEventStack.

eventStack
Pila de eventos para comparar con la jerarquía de tipos de evento descrita por TEvent y TEvents.

callable
Tras hacer coincidir correctamente la pila de eventos con la jerarquía de tipos de evento descrita por TEvent y TEvents, MatchEventStack invoca a callable. Pasa a callable un argumento de valor r para cada tipo en la jerarquía de eventos. El paquete de parámetros extraArgs se reenvía directamente a los parámetros restantes de callable.

extraArgs
Argumentos que se reenvían directamente a callable junto con el tipo de evento coincidente.

Valor devuelto

Valor bool que es true si la coincidencia se produjo correctamente, o false de lo contrario.

Comentarios

El último evento de eventStack siempre se compara con la última entrada de la lista de tipos [TEvent, TEvents...] concatenada. El resto de entradas de TEvent y TEvents pueden coincidir con cualquier posición de eventStack excepto la última, siempre que estén en el mismo orden.

Los tipos de evento que se van a usar para los parámetros TEvent y TEvents se seleccionan de una lista de clases de captura. Para obtener una lista de eventos y las clases de captura que puede usar para la comparación, consulte la tabla de eventos.

Ejemplo

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