【发布时间】:2016-10-18 14:26:54
【问题描述】:
我很难理解下面的代码
template <typename T>
struct function_traits
: public function_traits<decltype(&T::operator())>
{};
// For generic types, directly use the result of the signature of its 'operator()'
template <typename ClassType, typename ReturnType, typename... Args>
struct function_traits<ReturnType(ClassType::*)(Args...) const>
// we specialize for pointers to member function
{
// ...
}
int main()
{
auto lambda = [](int i) { return long(i*10); };
typedef function_traits<decltype(lambda)> traits;
// ...
return 0;
}
出现在答案https://stackoverflow.com/a/7943765/7006673。
这里,
template <typename ClassType, typename ReturnType, typename... Args>
struct function_traits<ReturnType(ClassType::*)(Args...) const>
似乎表明模板类的特殊化
template <typename T>
struct function_traits
然而,特化template <typename ClassType, typename ReturnType, typename... Args> 的模板参数列表不为空(即不等于template <>)。
谁能帮我理解一下,这是什么特化,模板参数ClassType,ReturnType,Args是怎么推导出来的?
非常感谢。
【问题讨论】:
标签: c++ templates c++14 template-specialization type-deduction