MatchEventStack
Sada C++ Build Insights SDK je kompatibilní se sadou Visual Studio 2017 a novějšími verzemi. Pokud chcete zobrazit dokumentaci k těmto verzím, nastavte ovládací prvek selektoru verzí sady Visual Studio pro tento článek na Visual Studio 2017 nebo novější. Nachází se v horní části obsahu na této stránce.
Funkce MatchEventStack
se používá ke shodě zásobníku událostí s konkrétní hierarchií událostí. Odpovídající hierarchie se předávají obslužné rutině pro další zpracování. Další informace o událostech, zásobníkech událostí a hierarchiích najdete v tabulce událostí.
Syntaxe
template <
typename TEvent,
typename... TEvents,
typename TCallable,
typename... TExtraArgs>
bool MatchEventStack(
const EventStack& eventStack,
TCallable&& callable,
TExtraArgs&&... extraArgs);
Parametry
TEvent
Typ nejstaršího nadřazeného objektu, který se má shodovat v zásobníku událostí.
TEvents
Zbývající typy, které chcete spárovat v zásobníku událostí.
TCallable
Typ, který podporuje operator()
. Další informace o tom, které argumenty se předají tomuto operátoru, naleznete v popisu volatelného parametru.
TExtraArgs
Typy nadbytečných argumentů předaných MatchEventStack
.
eventStack
Zásobník událostí, který se má shodovat s hierarchií typů událostí, kterou popisuje TEvent a TEvents.
vypověditelný
Po úspěšném spárování zásobníku událostí s hierarchií typů událostí, kterou popisuje TEvent a TEvents, MatchEventStack
vyvolá volání. Předává volatelný jeden argument r-hodnota pro každý typ v hierarchii událostí. Balíček parametrů extraArgs je dokonale přesměrovaný ve zbývajících parametrech volatelných.
extraArgs
Argumenty, které jsou dokonale přesměrované tak, aby volaly spolu s odpovídajícím typem události.
Návratová hodnota
Hodnota bool
, která je true
v případě, že byla shoda úspěšná, nebo false
jinak.
Poznámky
Poslední událost v eventStacku se vždy shoduje s poslední položkou v seznamu typů [TEvent, TEvents...]. Všechny ostatní položky TEvent a TEvents se můžou shodovat s libovolnou pozicí v eventStacku s výjimkou posledního, pokud jsou ve stejném pořadí.
Typy událostí, které se mají použít pro parametry TEvent a TEvents, jsou vybrány ze seznamu tříd zachycení. Seznam událostí a třídy zachycení, které můžete použít k jejich spárování, najdete v tabulce událostí.
Příklad
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).
}