MatchEventStack
C++ Build Insights SDK は、Visual Studio 2017 以降と互換性があります。 これらのバージョンのドキュメントを表示するには、この記事の Visual Studio バージョン セレクター コントロールを Visual Studio 2017 以降に設定します。 このページの目次の一番上にあります。
MatchEventStack
関数は、イベント スタックを特定のイベント階層と照合するために使用されます。 一致した階層は、後続の処理のためにハンドラーに転送されます。 イベント、イベント スタック、階層の詳細については、イベント テーブルに関する記事を参照してください。
構文
template <
typename TEvent,
typename... TEvents,
typename TCallable,
typename... TExtraArgs>
bool MatchEventStack(
const EventStack& eventStack,
TCallable&& callable,
TExtraArgs&&... extraArgs);
パラメーター
TEvent
イベント スタックで照合する最上位の親の型。
TEvents
イベント スタックで照合する残りの型。
TCallable
operator()
をサポートする型。 この演算子に渡される引数の詳細については、callable パラメーターの説明を参照してください。
TExtraArgs
MatchEventStack
に渡される追加の引数の型。
eventStack
TEvent と TEvents によって記述されるイベントの型の階層と照合するイベント スタック。
callable
TEvent および TEvents によって記述されるイベント型階層とイベント スタックが正常に照合されると、MatchEventStack
によって callable が呼び出されます。 callable には、イベント階層内の型ごとに 1 つの右辺値引数が渡されます。 extraArgs パラメーター パックは、callable の残りのパラメーターで完全に転送されます。
extraArgs
一致したイベントの型と共に callable に完全に転送される引数。
戻り値
正常に一致した場合は true
であり、それ以外の場合は false
である bool
値。
解説
eventStack の最後のイベントは、連結された [TEvent, TEvents...] 型リストの最後のエントリと常に照合されます。 TEvent と TEvents の他のすべてのエントリは、同じ順序になっている限り、eventStack 内の最後を除く任意の位置と照合できます。
TEvent および TEvents パラメーターに使用するイベントの型は、"キャプチャ クラス" のリストから選択します。 照合に使用できるイベントのリストとキャプチャ クラスについては、イベント テーブルに関する記事を参照してください。
例
void MyClass::OnStartActivity(const EventStack& eventStack)
{
// Let's assume eventStack contains:
// [Compiler, BackEndPass, C2DLL, CodeGeneration, Thread, Function]
bool b1 = MatchEventStack<Compiler, BackEndPass, C2DLL,
CodeGeneration, Thread, Function>(
eventStack, [](Compiler cl, BackEndPass bep, C2DLL c2,
CodeGeneration cg, Thread t, Function f){ /* Do something ... */ });
bool b2 = MatchEventStack<Compiler, Function>(
eventStack, [](Compiler cl, Function f){ /* Do something... */ });
bool b3 = MatchEventStack<Thread, Compiler, Function>(
eventStack, [](Thread t, Compiler cl Function f){ /* Do something... */ });
bool b4 = MatchEventStack<Compiler>(
eventStack, [](Compiler cl){ /* Do something... */ });
// b1: true because the list of types matches the eventStack exactly.
// b2: true because Function is the last entry in both the type list
// and 'eventStack', and also because Compiler comes before
// Function in 'eventStack' and in the type list.
// b3: false because, even though both Thread and Compiler come
// before Function in 'eventStack', they aren't listed in the
// right order in the type list.
// b4: false because the last entry in the type list is Compiler,
// which doesn't match the last entry in 'eventStack' (Function).
}