我試圖做一個幫助函數,如果給定的weak_ptr是有效的,當調用時執行lambda/std :: function。目前下面的代碼有效,但不幸的是,它需要我定義模板參數。我正在尋找一種方法來做到這一點與自動模板參數扣除。lambda的模板參數演繹
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...);
}
};
};
理想情況下,我想用一個通用模板參數FunctorType
更換std::function <void(ArgumentTypes...)>
,但當時我不知道我怎麼會從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...);
}
}
}
有沒有什麼辦法做這樣的事情?
如果你在'ArgumentTypes'後面加上'DependentType',你只需要指定'ArgumentTypes',因爲'DependentType'是可以被推斷的。 – Casey