猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
C ++ SFINAE示例?
我想了解更多模板元编程。我知道SFINAE代表“替代失败不是错误”。但是有人可以向我展示SFINAE的良好用途吗?
忽然笑
浏览 645
回答 3
3回答
精慕HU
我喜欢SFINAE用来检查布尔条件。template<int I> void div(char(*)[I % 2 == 0] = 0) { /* this is taken when I is even */}template<int I> void div(char(*)[I % 2 == 1] = 0) { /* this is taken when I is odd */}这可能非常有用。例如,我用它来检查使用运算符逗号收集的初始化列表是否不超过固定大小template<int N>struct Vector { template<int M> Vector(MyInitList<M> const& i, char(*)[M <= N] = 0) { /* ... */ }}仅当M小于N时才接受该列表,这意味着初始化列表没有太多元素。语法的char(*)[C]含义是:指向元素类型为char和size的数组的指针C。如果C为false(此处为0),则获得无效的type char(*)[0],该指针指向大小为零的数组:SFINAE使之有效,因此该模板将被忽略。用表示boost::enable_if,看起来像这样template<int N>struct Vector { template<int M> Vector(MyInitList<M> const& i, typename enable_if_c<(M <= N)>::type* = 0) { /* ... */ }}在实践中,我经常发现检查条件的能力是一种有用的能力。
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
C++
typedef入门问题
1 回答
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续