MatchEvent
Пакет SDK для Сборки C++ совместим с Visual Studio 2017 и более поздними версиями. Чтобы увидеть документацию для этих версий, установите в данной статье селектор Версия Visual Studio в Visual Studio 2017 и более поздних версий. Он находится в верхней части оглавления на этой странице.
Функция MatchEvent
используется для сопоставления событий со списком типов событий. Если событие соответствует типу в этом списке, оно передается обработчику для дальнейшей обработки.
Синтаксис
template <
typename TEvent,
typename... TEvents,
typename TCallable,
typename... TExtraArgs>
bool MatchEvent(
const RawEvent& event,
TCallable&& callable,
TExtraArgs&&... extraArgs);
Параметры
TEvent
Первый тип события для сопоставления.
TEvents
Остальные типы события для сопоставления.
TCallable
Тип, который поддерживает operator()
. Дополнительные сведения о том, какие аргументы передаются этому оператору, см. в описании параметра callable.
TExtraArgs
Типы дополнительных аргументов, переданных в MatchEvent
.
event
Событие для сопоставления с типом события, который описан в TEvent и TEvents.
callable
MatchEvent
вызывает callable после успешного сопоставления события с любым из типов событий, которые описаны в TEvent и TEvents. Первый аргумент, передаваемый в callable, является значением r для сопоставленного типа события. Пакет параметров extraArgs передается в неизменном виде в остальных параметрах callable.
extraArgs
Аргументы, которые без изменений перенаправляются в callable вместе с сопоставленным типом события.
Возвращаемое значение
Параметр типа bool
, который принимает значение true
в случае успешного сопоставления или false
в противном случае.
Замечания
Тип события для параметров TEvent и TEvents можно выбрать из списка классов захвата. Список событий и классы захвата, которые можно использовать для сопоставления, см. в таблице событий.
Пример
void MyClass::OnStartActivity(const EventStack& eventStack)
{
// Let's assume eventStack contains:
// [Compiler, BackEndPass, C2DLL, CodeGeneration, Thread, Function]
auto& functionEvent = eventStack.Back(); // The Function event
bool b1 = MatchEvent<Function, Thread>(
functionEvent, [](auto matchedEvent){ /* Do something... */});
bool b2 = MatchEvent<CodeGeneration, Thread>(
functionEvent, [](auto matchedEvent){ /* Do something... */});
// b1: true because the list of types contains Function, which is
// the type of the event we are trying to match.
// b2: false because the list of types doesn't contain Function.
}