この質問への答えは、クラス テンプレートを使用して関数型を分離します。
template <typename T>
struct function_args {};
template <typename R, typename... Args>
struct function_args<R(Args...)> {
using type = tuple<Args...>;
};
template <typename T>
using decltypeargs = typename function_args<T>::type;
ここで何が行われているかを調べたので、書き直そうとしましたfunction_args
。decltypeargs
テンプレートの必要性をなくすために、関数を使用してこれを実行しようとしました。しかし、不適切な構文に陥っていることに気付きました。
template <typename T>
tuple<> myTry();
template <typename Ret, typename... Args>
tuple<Args...> myTry<Ret(Args...)>();
私の希望は、 を呼び出すのではなく、型decltype(myTry<decltype(foo)>())
を取得するために呼び出すことでした。関数宣言でこれを行う方法はありますか?tuple
decltypeargs<decltype(foo)>