Поделиться через


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