MatchEventStack
Zestaw SDK usługi Build Insights języka C++ jest zgodny z programem Visual Studio 2017 lub nowszym. Aby zapoznać się z dokumentacją dla tych wersji, ustaw kontrolkę selektora wersji programu Visual Studio dla tego artykułu na program Visual Studio 2017 lub nowszy. Znajduje się on w górnej części spisu treści na tej stronie.
Funkcja MatchEventStack
służy do dopasowywania stosu zdarzeń do określonej hierarchii zdarzeń. Dopasowane hierarchie są przekazywane do programu obsługi w celu dalszego przetwarzania. Aby dowiedzieć się więcej o zdarzeniach, stosach zdarzeń i hierarchiach, zobacz tabelę zdarzeń.
Składnia
template <
typename TEvent,
typename... TEvents,
typename TCallable,
typename... TExtraArgs>
bool MatchEventStack(
const EventStack& eventStack,
TCallable&& callable,
TExtraArgs&&... extraArgs);
Parametry
TEvent
Typ najstarszego elementu nadrzędnego do dopasowania w stosie zdarzeń.
TEvents
Pozostałe typy, które chcesz dopasować w stosie zdarzeń.
Funkcja TCallable
Typ, który obsługuje operator()
element . Aby uzyskać więcej informacji o tym, które argumenty są przekazywane do tego operatora, zobacz opis parametru z możliwością wywołania .
TExtraArgs
Typy dodatkowych argumentów przekazanych do MatchEventStack
klasy .
eventStack
Stos zdarzeń zgodny z hierarchią typów zdarzeń opisaną przez TEvent i TEvents.
Nieopłacona
Po pomyślnym dopasowaniu stosu zdarzeń z hierarchią typów zdarzeń opisaną przez TEvent i TEvents MatchEventStack
wywołania można wywołać. Przekazuje do wywołania jednego argumentu r-value dla każdego typu w hierarchii zdarzeń. Pakiet parametrów extraArgs jest idealnie przekazywany w pozostałych parametrach wywoływania.
extraArgs
Argumenty, które są idealnie przekazywane do wywołania wraz z dopasowanym typem zdarzenia.
Wartość zwracana
bool
Wartość, która jest true
w przypadku pomyślnego dopasowania lub false
w inny sposób.
Uwagi
Ostatnie zdarzenie w aplikacji eventStack jest zawsze dopasowywane do ostatniego wpisu na liście typów TEvent [TEvent, TEvents...]. Wszystkie inne wpisy TEvent i TEvents mogą być zgodne z dowolną pozycją w usłudze eventStack z wyjątkiem ostatnich, pod warunkiem, że są one w tej samej kolejności.
Typy zdarzeń do użycia dla parametrów TEvent i TEvents są wybierane z listy klas przechwytywania. Aby uzyskać listę zdarzeń i klas przechwytywania, których można użyć do ich dopasowania, zobacz tabelę zdarzeń.
Przykład
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).
}