***** STL 原代码里面的一段看不董鸟(VS2012 版本) ************

hzhxxx hzhxxx 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

std::function 里面的申明如下
template<class _Fty>
class function
: public _Get_function_impl<_Fty>::type
{....
};

里面使用了类 _Get_function_impl,但是类定义的时候只有一个参数,下面的宏定义,模版偏特化(专门化)_Get_function_impl 的时候,回多出很多参数。也就是有可能是这样的。

template<class _Tx> struct _Get_function_impl;
展开宏定义,有可能出现类似下面的定义
template<class _Tx,class _v0_t> struct _Get_function_impl<_Tx,_v0_t>
{
typedef _Func_class<_Ret,v0_t> type;
};

template<class _Tx,class _v0_t,class _v1_t> struct _Get_function_impl<_Tx,_v0_t,v1_t>
{
typedef _Func_class<_Tx,_v0_t,_v1_t> type;
};

这样,和第一个定义,只有一个模版参数 _Tx 的不符,这个是什么原因???




// TEMPLATE CLASS _Get_function_impl
template<class _Tx>
struct _Get_function_impl;

#define _CLASS_GET_FUNCTION_IMPL( \
TEMPLATE_LIST, PADDING_LIST, LIST, COMMA, CALL_OPT, X2, X3, X4) \
template<class _Ret COMMA LIST(_CLASS_TYPE)> \
struct _Get_function_impl<_Ret CALL_OPT (LIST(_TYPE))> \
{ /* determine type from argument list */ \
typedef _Func_class<_Ret COMMA LIST(_TYPE)> type; \
};

#define _CLASS_GET_FUNCTION_IMPL_CALLS( \
TEMPLATE_LIST, PADDING_LIST, LIST, COMMA, CALL_OPT, X2, X3, X4) \
_VARIADIC_CALL_OPT_X1(_CLASS_GET_FUNCTION_IMPL, \
TEMPLATE_LIST, PADDING_LIST, LIST, COMMA, __cdecl, X2, X3, X4)

_VARIADIC_EXPAND_0X(_CLASS_GET_FUNCTION_IMPL_CALLS, , , , )


...全文

相关推荐

评论 26
收藏 已收藏
分享
返回顶部
hzhxxx
C++ 语言 65,214 成员 250,514 内容