MatchEventStackMatchEventStack

El SDK de C++ Build Insights es compatible con Visual Studio 2017 y versiones posteriores.The C++ Build Insights SDK is compatible with Visual Studio 2017 and above. Para ver la documentación de estas versiones, establezca el control selector de Versión de Visual Studio para este artículo en Visual Studio 2017 o Visual Studio 2019.To see the documentation for these versions, set the Visual Studio Version selector control for this article to Visual Studio 2017 or Visual Studio 2019. Se encuentra en la parte superior de la tabla de contenido de esta página.It's found at the top of the table of contents on this page.

La función MatchEventStack se usa para comparar una pila de eventos con una jerarquía de eventos específica.The MatchEventStack function is used to match an event stack against a specific event hierarchy. Las jerarquías coincidentes se reenvían a un controlador para su posterior procesamiento.Matched hierarchies are forwarded to a handler for further processing. Para obtener más información sobre eventos, pilas de eventos y jerarquías, vea la tabla de eventos.To learn more about events, event stacks, and hierarchies, see event table.

SintaxisSyntax

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

ParámetrosParameters

TEventTEvent
Tipo del elemento primario más antiguo que se va a comparar en la pila de eventos.The type of the eldest parent to match in the event stack.

TEventsTEvents
Tipos restantes que desea comparar en la pila de eventos.The remaining types you wish to match in the event stack.

TCallableTCallable
Tipo que admite operator().A type that supports operator(). Para obtener más información sobre qué argumentos se pasan a este operador, vea la descripción del parámetro callable.For more information on which arguments get passed to this operator, see the callable parameter description.

TExtraArgsTExtraArgs
Tipos de los argumentos adicionales pasados a MatchEventStack.The types of the extra arguments passed to MatchEventStack.

eventStackeventStack
Pila de eventos para comparar con la jerarquía de tipos de evento descrita por TEvent y TEvents.The event stack to match against the event type hierarchy described by TEvent and TEvents.

callablecallable
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.Upon successfully matching the event stack with the event type hierarchy described by TEvent and TEvents , MatchEventStack invokes callable. Pasa a callable un argumento de valor r para cada tipo en la jerarquía de eventos.It passes to callable one r-value argument for each type in event hierarchy. El paquete de parámetros extraArgs se reenvía directamente a los parámetros restantes de callable.The extraArgs parameter pack is perfect-forwarded in the remaining parameters of callable.

extraArgsextraArgs
Argumentos que se reenvían directamente a callable junto con el tipo de evento coincidente.The arguments that get perfect-forwarded to callable along with the matched event type.

Valor devueltoReturn Value

Valor bool que es true si la coincidencia se produjo correctamente, o false de lo contrario.A bool value that is true if matching was successful, or false otherwise.

ComentariosRemarks

El último evento de eventStack siempre se compara con la última entrada de la lista de tipos [TEvent , TEvents... ] concatenada.The last event in eventStack is always matched against the last entry in the concatenated [TEvent , TEvents...] type list. 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.All other TEvent and TEvents entries can match any position in eventStack except the last, provided they're in the same order.

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.Event types to use for the TEvent and TEvents parameters are selected from a list of capture classes. Para obtener una lista de eventos y las clases de captura que puede usar para la comparación, consulte la tabla de eventos.For a list of events and the capture classes you can use to match them, see event table.

EjemploExample

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