Partager via


MatchEventStack

Le SDK Build Insights C++ est compatible avec Visual Studio 2017 et ultérieur. Pour consulter la documentation de ces versions, définissez le contrôle de sélecteur Version de Visual Studio pour cet article sur Visual Studio 2017 ou ultérieur. Il se trouve en haut de la table des matières de cette page.

La MatchEventStack fonction est utilisée pour faire correspondre une pile d’événements à une hiérarchie d’événements spécifique. Les hiérarchies mises en correspondance sont transférées à un gestionnaire pour un traitement ultérieur. Pour en savoir plus sur les événements, les piles d’événements et les hiérarchies, consultez la table des événements.

Syntaxe

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

Paramètres

TEvent
Type du parent aîné à mettre en correspondance dans la pile d’événements.

TEvents
Types restants que vous souhaitez mettre en correspondance dans la pile des événements.

TCallable
Type qui prend en charge operator(). Pour plus d’informations sur les arguments transmis à cet opérateur, consultez la description du paramètre pouvant être appelé .

TExtraArgs
Types des arguments supplémentaires passés à MatchEventStack.

eventStack
Pile d’événements correspondant à la hiérarchie de type d’événement décrite par TEvent et TEvents.

joignable
Une fois la pile d’événements correctement mise en correspondance avec la hiérarchie de type d’événement décrite par TEvent et TEvents, MatchEventStack appelle l’appelant. Il passe à un argument r-value pouvant être appelé pour chaque type dans la hiérarchie d’événements. Le pack de paramètres extraArgs est parfaitement transféré dans les paramètres restants de l’appelant.

extraArgs
Arguments qui sont parfaitement transférés pour être appelants , ainsi que le type d’événement correspondant.

Valeur de retour

Valeur bool qui est true en cas de réussite de la correspondance, ou false autrement.

Notes

Le dernier événement dans eventStack est toujours mis en correspondance avec la dernière entrée dans la liste de types [TEvent, TEvents...] concaténée. Toutes les autres entrées TEvent et TEvents peuvent correspondre à n’importe quelle position dans eventStack à l’exception de la dernière, à condition qu’elles soient dans le même ordre.

Les types d’événements à utiliser pour les paramètres TEvent et TEvents sont sélectionnés dans une liste de classes de capture. Pour obtenir la liste des événements et les classes de capture que vous pouvez utiliser pour les mettre en correspondance, consultez la table des événements.

Exemple

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