【发布时间】:2016-07-19 16:30:26
【问题描述】:
this question 的答案使用类模板来挑选函数类型:
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)>。有没有办法通过函数声明来做到这一点?
【问题讨论】:
-
你不能用函数模板做部分特化。但我想你想问点别的。我不太清楚。
-
@Arunmu 听起来你已经回答了我的问题。但我不确定如何改进措辞。我试图将函数的返回和参数分开,我需要使用专业化来做到这一点。我想用一个函数来做,但听起来我做不到。是不是更清楚了?
-
不确定您要做什么。
myTry()只是打字多于不使用 - 你要解决的问题是什么? -
@JonathanMee 是的,更好,但恐怕答案还是一样的:)
-
@Barry 我只是想用对我更有意义的术语(函数声明)重写你的答案。但似乎函数声明不能像这样专门化。所以我只需要更适应专门化的对象。
标签: c++ templates metaprogramming template-function template-classes