MatchEventStackInMemberFunction
Пакет SDK для Сборки C++ совместим с Visual Studio 2017 и более поздними версиями. Чтобы увидеть документацию для этих версий, установите в данной статье селектор Версия Visual Studio в Visual Studio 2017 и более поздних версий. Он находится в верхней части оглавления на этой странице.
Функция MatchEventStackInMemberFunction
используется для сопоставления стека событий с определенной иерархией событий, которая описана списком параметров в функции-члене. Подходящие иерархии пересылаются функции-члену для дальнейшей обработки. Дополнительные сведения о событиях, стеках событий и иерархиях см. в таблице событий.
Синтаксис
template <
typename TInterface,
typename TReturn,
typename T1,
typename... TExtraParams,
typename... TExtraArgs>
bool MatchEventStackInMemberFunction(
const EventStack& eventStack,
TInterface* objectPtr,
TReturn (TInterface::* memberFunc)(T1, TExtraParams...),
TExtraArgs&&... extraArgs);
template <
typename TInterface,
typename TReturn,
typename T1,
typename T2,
typename... TExtraParams,
typename... TExtraArgs>
bool MatchEventStackInMemberFunction(
const EventStack& eventStack,
TInterface* objectPtr,
TReturn (TInterface::* memberFunc)(T1, T2, TExtraParams...),
TExtraArgs&&... extraArgs);
// Etc...
template <
typename TInterface,
typename TReturn,
typename T1,
typename T2,
typename T3,
typename T4,
typename T5,
typename T6,
typename T7,
typename T8,
typename T9,
typename T10,
typename... TExtraParams,
typename... TExtraArgs>
bool MatchEventStackInMemberFunction(
const EventStack& eventStack,
TInterface* objectPtr,
TReturn (TInterface::* memberFunc)(T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TExtraParams...),
TExtraArgs&&... extraArgs);
Параметры
TInterface
Тип, который содержит функцию-член.
TReturn
Возвращаемый тип функции-члена.
T1, ..., T10
Типы, описывающие иерархию событий для сопоставления.
TExtraParams
Типы дополнительных параметров, принимаемых функцией-членом, а также типы иерархии событий.
TExtraArgs
Типы дополнительных аргументов, переданных в MatchEventStackInMemberFunction
.
eventStack
Стек событий для сопоставления с иерархией типов событий, описанной в T1...T10.
objectPtr
Указатель на объект, для которого вызывается memberFunc.
memberFunc
Функция-член, которая описывает иерархию типов событий для сопоставления.
extraArgs
Аргументы, которые без изменений перенаправляются в memberFunc вместе с параметром иерархии типов событий.
Возвращаемое значение
Параметр типа bool
, который принимает значение true
в случае успешного сопоставления или false
в противном случае.
Замечания
Последнее событие в eventStack всегда сопоставляется с последней записью в предоставленной для сопоставления иерархии типов событий. Все остальные типы в иерархии типов событий могут соответствовать любому положению в eventStack, за исключением последнего, если расположены в том же порядке.
Типы события для параметров T1...T10 можно выбрать в списке классов захвата. Список событий и классы захвата, которые можно использовать для сопоставления, см. в таблице событий.
Пример
void MyClass::Foo1(Compiler cl, BackEndPass bep, C2DLL c2,
CodeGeneration cg, Thread t, Function f) { }
void MyClass::Foo2(Compiler cl, Function f) { }
void MyClass::Foo3(Thread t, Compiler cl, Function f) { }
void MyClass::Foo4(Compiler cl) { }
void MyClass::OnStartActivity(const EventStack& eventStack)
{
// Let's assume eventStack contains:
// [Compiler, BackEndPass, C2DLL, CodeGeneration, Thread, Function]
bool b1 = MatchEventStackInMemberFunction(
eventStack, this, &MyClass::Foo1);
bool b2 = MatchEventStackInMemberFunction(
eventStack, this, &MyClass::Foo2);
bool b3 = MatchEventStackInMemberFunction(
eventStack, this, &MyClass::Foo3);
bool b4 = MatchEventStackInMemberFunction(
eventStack, this, &MyClass::Foo4);
// b1: true because the parameter types of Foo1 match the eventStack
// exactly.
// b2: true because Function is the last entry in both the member
// function parameter list and 'eventStack', and also because
// Compiler comes before Function in 'eventStack' and in the
// parameter type list.
// b3: false because, even though both Thread and Compiler come
// before Function in 'eventStack', the member function parameter
// list doesn't list them in the right order.
// b4: false because the last entry in the member function parameter
// list is Compiler, which doesn't match the last entry in 'eventStack'
// (Function).
}