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