Aracılığıyla paylaş


MatchEventStack

C++ Build Insights SDK'sı Visual Studio 2017 ve sonraki sürümlerle uyumludur. Bu sürümlerin belgelerini görmek için bu makalenin Visual Studio Sürüm seçici denetimini Visual Studio 2017 veya üzeri olarak ayarlayın. Bu sayfadaki içindekiler tablosunun en üstünde bulunur.

MatchEventStack İşlev, bir olay yığınını belirli bir olay hiyerarşisine göre eşleştirmek için kullanılır. Eşleşen hiyerarşiler, daha fazla işlem için bir işleyiciye iletilir. Olaylar, olay yığınları ve hiyerarşiler hakkında daha fazla bilgi edinmek için bkz . olay tablosu.

Sözdizimi

template <
    typename          TEvent,
    typename...       TEvents,
    typename          TCallable,
    typename...       TExtraArgs>
bool MatchEventStack(
    const EventStack& eventStack,
    TCallable&&       callable,
    TExtraArgs&&...   extraArgs);

Parametreler

TEvent
Olay yığınında eşleşecek en büyük üst öğe türü.

TEvents
Olay yığınında eşleştirmek istediğiniz kalan türler.

Çağrılabilen
destekleyen operator()bir tür. Bu işleç için hangi bağımsız değişkenlerin geçirildiği hakkında daha fazla bilgi için çağrılabilen parametre açıklamasına bakın.

TExtraArgs
öğesine geçirilen MatchEventStackek bağımsız değişkenlerin türleri.

eventStack
TEvent ve TEvents tarafından açıklanan olay türü hiyerarşisi ile eşleşecek olay yığını.

Callable
Olay yığınını TEvent ve TEvents tarafından açıklanan olay türü hiyerarşisiyle başarıyla eşleştirtikte çağrılabilir MatchEventStackçağırır. Olay hiyerarşisindeki her tür için çağrılabilen bir r değeri bağımsız değişkenine geçer. extraArgs parametre paketi, çağrılabilen öğesinin kalan parametrelerinde mükemmel iletilir.

extraArgs
Eşlenen olay türüyle birlikte çağrılabilene mükemmel iletilen bağımsız değişkenler.

Dönüş Değeri

bool Eşleştirmenin başarılı olduğu veya false başka bir şekilde olduğu bir değertrue.

Açıklamalar

eventStack'teki son olay her zaman birleştirilmiş [TEvent, TEvents...] tür listesindeki son girişle eşleştirilir. Aynı sırada olmaları koşuluyla, diğer tüm TEvent ve TEvents girişleri eventStack'teki son konum dışında herhangi bir konumla eşleşebilir.

TEvent ve TEvents parametreleri için kullanılacak olay türleri, yakalama sınıfları listesinden seçilir. Olayları ve bunları eşleştirmek için kullanabileceğiniz yakalama sınıflarının listesi için olay tablosuna bakın.

Örnek

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