这个问题的答案使用类模板挑选出一个函数类型:
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)>
。有没有办法通过函数声明来做到这一点?