updated doc + minor changes
This commit is contained in:
@@ -46,7 +46,7 @@ auto to_function_pointer(Ret(Class:: *)(Args...) const, Class *) -> Ret(*)(Args.
|
||||
*/
|
||||
|
||||
|
||||
/*! @brief Used to wrap a function or a member function of a specified type. */
|
||||
/*! @brief Used to wrap a function or a member of a specified type. */
|
||||
template<auto>
|
||||
struct connect_arg_t {};
|
||||
|
||||
@@ -67,14 +67,14 @@ class delegate;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Utility class to use to send around functions and member functions.
|
||||
* @brief Utility class to use to send around functions and members.
|
||||
*
|
||||
* Unmanaged delegate for function pointers and member functions. Users of this
|
||||
* class are in charge of disconnecting instances before deleting them.
|
||||
* Unmanaged delegate for function pointers and members. Users of this class are
|
||||
* in charge of disconnecting instances before deleting them.
|
||||
*
|
||||
* A delegate can be used as general purpose invoker with no memory overhead for
|
||||
* free functions and member functions provided along with an instance on which
|
||||
* to invoke them. It comes also with limited support for curried functions.
|
||||
* free functions and members provided along with an instance on which to invoke
|
||||
* them. It comes also with limited support for curried functions.
|
||||
*
|
||||
* @tparam Ret Return type of a function type.
|
||||
* @tparam Args Types of arguments of a function type.
|
||||
@@ -107,12 +107,12 @@ public:
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Constructs a delegate and connects a member function for a given
|
||||
* instance or a curried free function to it.
|
||||
* @tparam Candidate Member function or curried free function to connect to
|
||||
* the delegate.
|
||||
* @tparam Type Type of class to which the member function belongs or type
|
||||
* of value used for currying.
|
||||
* @brief Constructs a delegate and connects a member for a given instance
|
||||
* or a curried free function to it.
|
||||
* @tparam Candidate Member or curried free function to connect to the
|
||||
* delegate.
|
||||
* @tparam Type Type of class to which the member belongs or type of value
|
||||
* used for currying.
|
||||
* @param value_or_instance A valid pointer to an instance of class type or
|
||||
* the value to use for currying.
|
||||
*/
|
||||
@@ -150,12 +150,12 @@ public:
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Connects a member function for a given instance or a curried free
|
||||
* function to a delegate.
|
||||
* @brief Connects a member for a given instance or a curried free function
|
||||
* to a delegate.
|
||||
*
|
||||
* When used to connect a member function, the delegate isn't responsible
|
||||
* for the connected object. Users must guarantee that the lifetime of the
|
||||
* instance overcomes the one of the delegate.<br/>
|
||||
* When used to connect a member, the delegate isn't responsible for the
|
||||
* connected object. Users must guarantee that the lifetime of the instance
|
||||
* overcomes the one of the delegate.<br/>
|
||||
* When used to connect a curried free function, the linked value must be
|
||||
* both trivially copyable and trivially destructible, other than such that
|
||||
* its size is lower than or equal to the one of a `void *`. It means that
|
||||
@@ -163,10 +163,10 @@ public:
|
||||
* signature of the free function must be such that the value is the first
|
||||
* argument before the ones used to define the delegate itself.
|
||||
*
|
||||
* @tparam Candidate Member function or curried free function to connect to
|
||||
* the delegate.
|
||||
* @tparam Type Type of class to which the member function belongs or type
|
||||
* of value used for currying.
|
||||
* @tparam Candidate Member or curried free function to connect to the
|
||||
* delegate.
|
||||
* @tparam Type Type of class to which the member belongs or type of value
|
||||
* used for currying.
|
||||
* @param value_or_instance A valid pointer to an instance of class type or
|
||||
* the value to use for currying.
|
||||
*/
|
||||
@@ -218,7 +218,7 @@ public:
|
||||
*
|
||||
* @warning
|
||||
* Attempting to use an instance returned by a delegate that doesn't contain
|
||||
* a pointer to a member function results in undefined behavior.
|
||||
* a pointer to a member results in undefined behavior.
|
||||
*
|
||||
* @return An opaque pointer to the instance linked to the delegate, if any.
|
||||
*/
|
||||
@@ -257,9 +257,8 @@ public:
|
||||
/**
|
||||
* @brief Checks if the connected functions differ.
|
||||
*
|
||||
* In case of member functions, the instances connected to the delegate
|
||||
* are not verified by this operator. Use the instance member function
|
||||
* instead.
|
||||
* In case of members, the instances connected to the delegate are not
|
||||
* verified by this operator. Use the `instance` member function instead.
|
||||
*
|
||||
* @param other Delegate with which to compare.
|
||||
* @return False if the connected functions differ, true otherwise.
|
||||
@@ -277,8 +276,8 @@ private:
|
||||
/**
|
||||
* @brief Checks if the connected functions differ.
|
||||
*
|
||||
* In case of member functions, the instances connected to the delegate are not
|
||||
* verified by this operator. Use the `instance` member function instead.
|
||||
* In case of members, the instances connected to the delegate are not verified
|
||||
* by this operator. Use the `instance` member function instead.
|
||||
*
|
||||
* @tparam Ret Return type of a function type.
|
||||
* @tparam Args Types of arguments of a function type.
|
||||
@@ -309,12 +308,11 @@ delegate(connect_arg_t<Function>) ENTT_NOEXCEPT
|
||||
* @brief Deduction guideline.
|
||||
*
|
||||
* It allows to deduce the function type of the delegate directly from a member
|
||||
* function or a curried free function provided to the constructor.
|
||||
* or a curried free function provided to the constructor.
|
||||
*
|
||||
* @tparam Candidate Member function or curried free function to connect to
|
||||
* the delegate.
|
||||
* @tparam Type Type of class to which the member function belongs or type
|
||||
* of value used for currying.
|
||||
* @tparam Candidate Member or curried free function to connect to the delegate.
|
||||
* @tparam Type Type of class to which the member belongs or type of value used
|
||||
* for currying.
|
||||
*/
|
||||
template<auto Candidate, typename Type>
|
||||
delegate(connect_arg_t<Candidate>, Type) ENTT_NOEXCEPT
|
||||
|
||||
@@ -176,6 +176,7 @@ public:
|
||||
template<auto Candidate, typename Type>
|
||||
void connect(Type value_or_instance) {
|
||||
if constexpr(std::is_class_v<std::remove_pointer_t<Type>>) {
|
||||
static_assert(std::is_member_function_pointer_v<decltype(Candidate)>);
|
||||
disconnect<Candidate>(value_or_instance);
|
||||
} else {
|
||||
disconnect<Candidate>();
|
||||
@@ -205,6 +206,7 @@ public:
|
||||
*/
|
||||
template<auto Member, typename Class>
|
||||
void disconnect(Class *instance) {
|
||||
static_assert(std::is_member_function_pointer_v<decltype(Member)>);
|
||||
delegate<Ret(Args...)> delegate{};
|
||||
delegate.template connect<Member>(instance);
|
||||
calls->erase(std::remove_if(calls->begin(), calls->end(), [&delegate](const auto &other) {
|
||||
|
||||
Reference in New Issue
Block a user