C++学习 boost学习之-enable_if
来源:互联网 发布:深圳java程序员招聘 编辑:程序博客网 时间:2024/05/17 05:53
Boost中文手册下载:http://download.csdn.net/detail/skdkjxy/8723045
用法:
1
你需要在把一个符合某些条件的函数加入到或排除出重载决议集合中。
你需要根据某个条件将一个类模板的特化版本加入到或排除出特化集合中。
void some_func(int i)
{
std::cout << "void some_func(" << i << ")\n";
}
template <typename T> void some_func(
T t,typename boost::disable_if<
boost::is_integral<T> >::type* p=0)
{
typename T::type variable_of_nested_type;
std::cout << "template <typename T> void some_func(T t)\n";
}
int mian
{
short s=12;
some_func(s);
return 0
}
如果第二个函数没有,typename boost::disable_if<boost::is_integral<T> >::type* p=0参数,编译该程序会报错,错误原因是main中采用了
模版形式的some_func函数,为了排除该模板函数,而采用第一个int参数的some_func,需要用到disable_if;
disable_if在boost实现中相关代码如下:
template <bool B, class T = void>
struct disable_if_c {
typedef T type;
};
template <class T>
struct disable_if_c<true, T> {};
template <class Cond, class T = void>
struct disable_if : public disable_if_c<Cond::value, T> {};
如果T是int类型或short类型,编译器会推演实现如下形式的类,也是disable_if的基类,
template <class T>
struct disable_if_c<true, T> {};
该类没有定义typedef type,所以不会实例化模板形式的some_func,所以
模板形式的some_func也不会成为模板推演中的候选函数,所以就被排除在外了;
这个就是:disable_if的内部原理,通过阻止函数的实例化,达到成为模板推演候选函数的目的;
综上,disable_if的原理有点难以理解,但是还是有很大作用的,在实际中,我感觉只要不是要实现boost库之类的库,一般都不会用到这个东西;
- boost学习之-enable_if
- C++学习 boost学习之-enable_if
- Boost::Utility库 之enable_if
- boost::enable_if 详解
- boost.core.enable_if
- Boost学习之Boost简介
- 【boost学习】之boost::bind
- boost学习之Boost.Lambda
- 学习boost之lexical_cast
- 学习boost之format
- 学习boost之filesystem
- boost学习之function
- boost之spirit学习
- boost学习之-scoped_ptr
- boost学习之-scoped_array
- boost学习之-shared_ptr
- boost学习之-shared_array
- boost学习之-intrusive_ptr
- Reverse Bits
- ps命令
- Geometry Instancing
- 雅虎网站页面性能优化的34条黄金守则
- LeetCode题解:Reverse Linked List
- C++学习 boost学习之-enable_if
- VS报错C3130
- google perftools
- 问题追踪定位常用工具
- Excel中利用VLOOKUP进行逆向查找(亲自实践)
- Hadoop的日志存在哪里?
- grep命令
- java filter过滤器的功能简要介绍
- 集合框架学习总结