如果给定的weak_ptr有效,我正在尝试创建一个在调用时执行 lambda/std::function 的辅助函数。目前以下代码有效,但不幸的是,它需要我定义模板参数。我正在寻找一种通过自动模板参数推导来做到这一点的方法。
template <typename DependentType, typename... ArgumentTypes>
auto make_dependent(std::weak_ptr<DependentType>& dependent, std::function < void(ArgumentTypes...)> functor) -> decltype(functor)
{
return [&dependent, functor] (ArgumentTypes... args)
{
if (!dependent.expired()) {
functor(args...);
}
};
};
理想情况下,我想std::function <void(ArgumentTypes...)>
用通用模板参数替换FunctorType
,但是我不确定如何从FunctorType
. 上面的代码有效,下面的代码是理论上的:
template <typename DependentType, typename FunctorType>
auto make_dependent_ideal(std::weak_ptr<DependentType>& dependent, FunctorType functor) -> decltype(std::function<return_value(functor)(argument_list(functor))>)
{
return[&dependent, functor](argument_list(functor) args)
{
if (!dependent.expired()) {
functor(args...);
}
}
}
有没有办法做这样的事情?