指定されたweak_ptrが有効な場合に呼び出されたときにラムダ/std::関数を実行するヘルパー関数を作成しようとしています。現在、次のコードは機能しますが、残念ながら、テンプレート パラメーターを定義する必要があります。自動テンプレート引数推定でこれを行う方法を探しています。
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...);
}
}
}
このようなことをする方法はありますか?