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


MatchEventInMemberFunction

Пакет SDK для Сборки C++ совместим с Visual Studio 2017 и более поздними версиями. Чтобы увидеть документацию для этих версий, установите в данной статье селектор Версия Visual Studio в Visual Studio 2017 и более поздних версий. Он находится в верхней части оглавления на этой странице.

Функция MatchEventInMemberFunction используется для сопоставления событий с типом, который описывается в первом параметре функции-члена. Подходящее событие пересылается функции-члену для дальнейшей обработки.

Синтаксис

template <
    typename     TInterface,
    typename     TReturn,
    typename     TEvent,
    typename...  TExtraParams,
    typename...  TExtraArgs>
bool MatchEventInMemberFunction(
    const RawEvent&          event,
    TInterface*              objectPtr,
    TReturn (TInterface::*   memberFunc)(TEvent, TExtraParams...),
    TExtraArgs&&...          extraArgs);

Параметры

TInterface
Тип, который содержит функцию-член.

TReturn
Возвращаемый тип функции-члена.

TEvent
Тип события для сопоставления.

TExtraParams
Типы дополнительных параметров, принимаемых функцией-членом, а также тип события для сопоставления.

TExtraArgs
Типы дополнительных аргументов, переданных в MatchEventInMemberFunction.

event
Событие для сопоставления с типом события, который описан в TEvent.

objectPtr
Указатель на объект, для которого вызывается memberFunc.

memberFunc
Функция-член, которая описывает тип события для сопоставления.

extraArgs
Аргументы, которые без изменений перенаправляются в memberFunc вместе с параметром типа события.

Возвращаемое значение

Параметр типа bool, который принимает значение true в случае успешного сопоставления или false в противном случае.

Замечания

Тип события для параметра TEvent, можно выбрать из списка классов захвата. Список событий и классы захвата, которые можно использовать для сопоставления, см. в таблице событий.

Пример

void MyClass::Foo1(Function f) {}

void MyClass::Foo2(Compiler cl) {}

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 = MatchEventInMemberFunction(
        functionEvent, this, &MyClass::Foo1);

    bool b2 = MatchEventInMemberFunction(
        functionEvent, this, &MyClass::Foo2);

    // b1: true because the first parameter of Foo1 is Function.
    // b2: false because the first parameter of Foo2 isn't Function.
}