gpt4 book ai didi

c++ - 具有非空模板参数列表的模板特化

转载 作者:搜寻专家 更新时间:2023-10-31 00:56:12 25 4
gpt4 key购买 nike

我很难理解下面的代码

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是推导出来的吗?

非常感谢。

最佳答案

What kind of specialization this is?

这是一个 partial specialization . type_traits显式实例化为:

T = ReturnType(ClassType::*)(Args...) const

但是这个T依赖于 ReturnType , ClassType , 和 Args .这就是为什么你没有 template <>在声明中(这将是一个 full specialization ),但是一个带有新参数的模板声明描述了一种特殊的 T .

How the template parameters ClassType, ReturnType, and Args are deduced?

它们是在使用适合此特化的表达式实例化模板时推导出来的。在这里,ReturnType(ClassType::*)(Args...) const只能用指向方法的指针替换。

这是 SFINAE 的示例.

关于c++ - 具有非空模板参数列表的模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40110924/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com