注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

SFINAE原理及其在模板中的使用之五对成员判断的细节的分析  

2014-07-08 17:41:07|  分类: C++(VC)编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

SFINAE原理及其在模板中的使用之五对成员判断的细节的分析

 

在上面的博文中有下面的代码:

//Check for member variable with given name.

#define CREATE_MEMBER_VAR_CHECK(var_name)                                   \

                                                                            \

template<typename T, typename = std::true_type>                             \

struct has_member_var_##var_name : std::false_type {};                      \

                                                                            \

template<typename T>                                                        \

struct has_member_var_##var_name<                                           \

    T                                                                       \

    , std::integral_constant<                                               \

        bool                                                                \

        , !std::is_member_function_pointer<decltype(&T::var_name)>::value   \

    >                                                                       \

> : std::true_type {}

 

他展开后的代码如下:

template<typename T, typename = std::true_type>

struct has_member_var_foo1 : std::false_type{};

template<typename T>

struct has_member_var_foo1< T, std::integral_constant< bool,!std::is_member_function_pointer<decltype(&(T::foo))>::value >>: std::true_type{};

 

这个一开始把他当作模板的元编程了,始终糊涂着,后来才发现他是一个模板的偏特化,如下面写了一个例程:

template<typename U,typename T>

class myTest

{

public: static const int t = 5;

};

template<typename U>

class myTest<int, U>

{

public:static const int t = 50;

};

很清楚吧,不过上面展开后的代码却在判断中无法正确判断,也就是说,始终返回一个false,也就说明偏特化的匹配是不对的。如果是自己写的例程如下代码可以正确的匹配偏特化的模板:

         int ok = myTest<int, int>::t;  //偏特化

         ok = myTest<double, int>::t;   //普通

可是最上面的不知道如何匹配,无论用何种方法返回总是不对。请牛人教我。

  评论这张
 
阅读(463)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017