MatchEventInMemberFunction

The C++ Build Insights SDK is compatible with Visual Studio 2017 and later. To see the documentation for these versions, set the Visual Studio Version selector control for this article to Visual Studio 2017 or later. It's found at the top of the table of contents on this page.

The MatchEventInMemberFunction function is used to match an event against the type described by the first parameter of a member function. The matched event is forwarded to the member function for further processing.

Syntax

template <
    typename     TInterface,
    typename     TReturn,
    typename     TEvent,
    typename...  TExtraParams,
    typename...  TExtraArgs>
bool MatchEventInMemberFunction(
    const RawEvent&          event,
    TInterface*              objectPtr,
    TReturn (TInterface::*   memberFunc)(TEvent, TExtraParams...),
    TExtraArgs&&...          extraArgs);

Parameters

TInterface
The type that contains the member function.

TReturn
The return type of the member function.

TEvent
The type of the event to match.

TExtraParams
The types of the extra parameters accepted by the member function along with the event type to match.

TExtraArgs
The types of the extra arguments that were passed to MatchEventInMemberFunction.

event
The event to match against the event type described by TEvent.

objectPtr
A pointer to an object on which memberFunc gets called.

memberFunc
The member function that describes the event type to match.

extraArgs
The arguments that get perfect-forwarded to memberFunc along with the event type parameter.

Return Value

A bool value that is true if matching was successful, or false otherwise.

Remarks

The event type to use for the TEvent parameter can be selected from a list of capture classes. For a list of events and the capture classes you can use to match them, see event table.

Example

void MyClass::Foo1(Function f) {}

void MyClass::Foo2(Compiler cl) {}

void MyClass::OnStartActivity(const EventStack& eventStack)
{
    // Let's assume eventStack contains:
    // [Compiler, BackEndPass, C2DLL, CodeGeneration, Thread, Function]

    auto& functionEvent = eventStack.Back(); // The Function event

    bool b1 = MatchEventInMemberFunction(
        functionEvent, this, &MyClass::Foo1);

    bool b2 = MatchEventInMemberFunction(
        functionEvent, this, &MyClass::Foo2);

    // b1: true because the first parameter of Foo1 is Function.
    // b2: false because the first parameter of Foo2 isn't Function.
}