私は、指定されたweak_ptrが有効な場合にlambda/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...);
}
};
};
理想的には、私は、一般的なテンプレートパラメータ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...);
}
}
}
このような方法はありますか?
'ArgendTypes'の後に' DependentType'を置くと、 'DependentType'が導かれるので' ArgumentTypes'だけを指定するだけです。 – Casey