MatchEventStackInMemberFunction
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 MatchEventStackInMemberFunction
jest używana do dopasowywania stosu zdarzeń do określonej hierarchii zdarzeń opisanej przez listę parametrów funkcji składowej. Dopasowane hierarchie są przekazywane do funkcji składowej w celu dalszego przetwarzania. Aby dowiedzieć się więcej o zdarzeniach, stosach zdarzeń i hierarchiach, zobacz tabelę zdarzeń.
Składnia
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);
Parametry
TInterface
Typ, który zawiera funkcję składową.
TReturn
Zwracany typ funkcji składowej.
T1, ..., T10
Typy opisujące hierarchię zdarzeń, które mają być zgodne.
TExtraParams
Typy dodatkowych parametrów akceptowanych przez funkcję składową i typy hierarchii zdarzeń.
TExtraArgs
Typy dodatkowych argumentów, które zostały przekazane do MatchEventStackInMemberFunction
.
eventStack
Stos zdarzeń zgodny z hierarchią typów zdarzeń opisaną przez T1 do T10.
objectPtr
Wskaźnik do obiektu, na którym jest wywoływany element memberFunc .
memberFunc
Funkcja składowa, która opisuje hierarchię typów zdarzeń, która ma być zgodna.
extraArgs
Argumenty, które są idealnie przekazywane do elementu memberFunc wraz z parametrami hierarchii typów zdarzeń.
Wartość zwracana
bool
Wartość, która jest true
w przypadku pomyślnego dopasowania lub false
w inny sposób.
Uwagi
Ostatnie zdarzenie w systemie eventStack jest zawsze dopasowywane do ostatniego wpisu w hierarchii typów zdarzeń w celu dopasowania. Wszystkie inne typy w hierarchii typów zdarzeń mogą być zgodne z dowolną pozycją w stosie zdarzeń, z wyjątkiem ostatniego, pod warunkiem, że są w tej samej kolejności.
Typy zdarzeń do użycia dla parametrów T1 do T10 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::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).
}