Aracılığıyla paylaş


MatchEventStackInMemberFunction

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.

MatchEventStackInMemberFunction İşlev, bir üye işlevin parametre listesi tarafından açıklanan belirli bir olay hiyerarşisi ile bir olay yığınını eşleştirmek için kullanılır. Eşleşen hiyerarşiler, daha fazla işlem için üye işlevine iletilir. Olaylar, olay yığınları ve hiyerarşiler hakkında daha fazla bilgi edinmek için bkz . olay tablosu.

Sözdizimi

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);

Parametreler

TInterface
Üye işlevini içeren tür.

TReturn
Üye işlevinin dönüş türü.

T1, ..., T10
Eşleşecek olay hiyerarşisini açıklayan türler.

TExtraParams
Üye işlevi tarafından kabul edilen ek parametre türleri ve olay hiyerarşisi türleri.

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

eventStack
T1 ile T10 arasında tanımlanan olay türü hiyerarşisi ile eşleşecek olay yığını.

objectPtr
memberFunc öğesinin çağrıldığı nesnenin işaretçisi.

memberFunc
Eşleşecek olay türü hiyerarşisini açıklayan üye işlevi.

extraArgs
Olay türü hiyerarşi parametreleriyle birlikte memberFunc'a 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 olay türü hiyerarşisindeki eşleşecek son girişle eşleştirilir. Olay türü hiyerarşisindeki diğer tüm türler, aynı sırada olmaları koşuluyla eventStack'teki son konum dışındaki herhangi bir konumu eşleştirebilir.

T1 ile T10 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::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).
}