mirror of
https://github.com/Naios/continuable.git
synced 2025-12-07 01:06:44 +08:00
Implement make_shared_callback
This commit is contained in:
parent
7a67bff246
commit
4b10c95cfc
@ -22,6 +22,7 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
|
|
||||||
|
#include "functional_unwrap.hpp"
|
||||||
|
|
||||||
template<typename... Args>
|
template<typename... Args>
|
||||||
using Callback = std::function<void(Args...)>;
|
using Callback = std::function<void(Args...)>;
|
||||||
@ -32,11 +33,32 @@ using SharedCallback = std::shared_ptr<Callback<Args...>>;
|
|||||||
template<typename... Args>
|
template<typename... Args>
|
||||||
using WeakCallback = std::weak_ptr<Callback<Args...>>;
|
using WeakCallback = std::weak_ptr<Callback<Args...>>;
|
||||||
|
|
||||||
template<typename... Args>
|
namespace detail
|
||||||
auto make_shared_callback(Callback<Args...>&& callback)
|
|
||||||
-> SharedCallback<Args...>
|
|
||||||
{
|
{
|
||||||
return std::make_shared<Callback<Args...>>(std::forward<Callback<Args...>>(callback));
|
template<typename... Args>
|
||||||
|
struct do_unwrap_callback;
|
||||||
|
|
||||||
|
template<typename... Args>
|
||||||
|
struct do_unwrap_callback<std::tuple<Args...>>
|
||||||
|
{
|
||||||
|
typedef Callback<Args...> CallbackType;
|
||||||
|
|
||||||
|
typedef SharedCallback<Args...> SharedCallbackType;
|
||||||
|
|
||||||
|
typedef WeakCallback<Args...> WeakCallbackType;
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename _CTy>
|
||||||
|
using unwrap_callback = do_unwrap_callback<::fu::argument_type_t<_CTy>>;
|
||||||
|
|
||||||
|
} // detail
|
||||||
|
|
||||||
|
template<typename _CTy>
|
||||||
|
typename detail::unwrap_callback<_CTy>::SharedCallbackType
|
||||||
|
make_shared_callback(_CTy&& callback)
|
||||||
|
{
|
||||||
|
return std::make_shared<typename detail::unwrap_callback<_CTy>::CallbackType>
|
||||||
|
(std::forward<typename detail::unwrap_callback<_CTy>::CallbackType>(callback));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /// _TASK_SCHEDULER_H_
|
#endif /// _TASK_SCHEDULER_H_
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user