1

関数があり、特定の型の引数を渡すことができるかどうかをテストする必要があります。例えば:

template<typename T, auto F>
decltype(F(declval<T>{})) foo();

呼び出しfoo<int, bar>()は次の 2 つのことを行います。

  1. の戻り値の型をfooと同じ戻り値の型に設定しますbar
  2. bar型の引数を受け入れる関数であることを確認しますT

残念ながら、autoテンプレートの種類にアクセスすることはできませんが、これらの両方を実現したいと考えています。私が必要としているのはdecltype、関数ポインタ用です。これにより、次のようなことができます。

template <typename T, typename F>
decltype(declval<F>(declval<T>{})) foo();

そのため、引き続き呼び出しfoo<int, bar>()て同じ結果を得ることができました。もちろんdeclval、関数ポインタには for はありません。しかし、これを達成できる別の方法はありますか?

4

1 に答える 1