Skip to content

Create a new delegate specialization #19

Description

@uselessgoddess

We can create ConstDelegate or UniqueDelegate, or NonMutableDelegate and others
For support the follow style:

auto GlobalDelegate = Delegate(...);

// change follow function
{
    GlobalDelegate Delegate(shared ptr to object, ptr to method);
}

// case #1 - create from standart delegate
{
    auto delegate = NEW_DELEGATE_NAME(GlobalDelegate);
    WorkFunc(delegate);
}

// case #2 - create from ref to object and ptr to method
auto global_ptr = std::shared_ptr(...);
{
    auto delegate = NEW_DELEGATE_NAME(*global_ptr, &decltype(*global_ptr)::FOO);
    WorkFunc(delegate);
}

// case #3 - create from ref to object and ptr to method
auto global_ptr = std::shared_ptr(...);
{
    Object object = ...;
    auto delegate = NEW_DELEGATE_NAME(object, &Object::FOO);
    WorkFunc(delegate);
}

// case #4 - create from unique_ptr to object and ptr to method
auto global_ptr = std::shared_ptr(...);
{
    auto object = std::unique_ptr(...);
    auto delegate = NEW_DELEGATE_NAME(object, &decltype(*object)::FOO);
    WorkFunc(delegate);
}

The main purpose of such a delegate is to avoid creating a std::shared_ptr.
Since it can use only objects from its own visibility zone or from a higher one, there will be no problems with dangling pointers

P.S. also can use Platform::Delegates::Delegate template specialization

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions