理解这里的意思,来说说你的理解。注释部分

walkereklaw 2016-10-14 04:48:46
#ifndef UNTITLED_FUNCTION_TRAITS_H
#define UNTITLED_FUNCTION_TRAITS_H

#include <functional>

template<typename T>
struct function_traits;

//普通函数
template<typename Ret, typename... Args>
struct function_traits<Ret(Args...)>
{
public:
enum { arity = sizeof...(Args) };
typedef Ret function_type(Args...);
typedef Ret return_type;
using stl_function_type = std::function<function_type>;
typedef Ret(*pointer)(Args...);

template<size_t I>
struct args
{
static_assert(I < arity, "index is out of range, index must less than sizeof Args");
using type = typename std::tuple_element<I, std::tuple<Args...>>::type;
};
};

//函数指针
template<typename Ret, typename... Args>
struct function_traits<Ret(*)(Args...)> : function_traits<Ret(Args...)>{};

//std::function
template <typename Ret, typename... Args>
struct function_traits<std::function<Ret(Args...)>> : function_traits<Ret(Args...)>{}; //这是什么?怎么理解?

//member function
#define FUNCTION_TRAITS(...) \
template <typename ReturnType, typename ClassType, typename... Args>\
struct function_traits<ReturnType(ClassType::*)(Args...) __VA_ARGS__> : function_traits<ReturnType(Args...)>{}; \

FUNCTION_TRAITS()
FUNCTION_TRAITS(const)
FUNCTION_TRAITS(volatile)
FUNCTION_TRAITS(const volatile)

//函数对象
template<typename Callable>
struct function_traits : function_traits<decltype(&Callable::operator())>{};

#endif //UNTITLED_FUNCTION_TRAITS_H
...全文
161 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Symfund 2016-10-14
  • 打赏
  • 举报
回复
首先,我们看看Merriam-Webster英英词典对traits的解释: trait: a quality that makes one person or thing different from another 中文意思有“特质”的意思。 如:curiosity is one of her notable traits 好奇心是她惹人注目的特质 好的,我们从字面上来理解function traits就是“函数的特质“。联想开来,函数有哪些特质呢,无非就是些”返回类型“,”参数“。我们将返回类型,参数进行”泛函“化,形成一个模板,不就是”函数簇“嘛,这就是函数签名模板呀。 进而可联想到”函数指针“ 上面的注释叫"overload", 而不是"override",明白了吗?

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧