
boost模板元编程
xiangjie256
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
multi_index_container
根据不同的类中不同的字段排序[code="c++"]#include #include #include #include #include using namespace boost;using namespace std;struct Student{ Student(int i,string n,int a) { ...原创 2018-08-11 13:04:03 · 201 阅读 · 0 评论 -
为什么要用hpp后缀
1.使用Boost库不需要预先编译,直接引入工程即可编译链接,方便库的使用使用2.许多编译器尚不支持C++标准提出的模板的分离编译模式(export关键字),而Boost库大量使用了模板,为了保持与各个编译器的兼容,也不得不采用.hpp的头文件形式...原创 2011-04-05 16:35:06 · 451 阅读 · 0 评论 -
boost 信号槽
[code="c++"]#include#includeusing namespace boost::signals2;using namespace std;void slots1(){ cout原创 2011-06-08 23:43:07 · 232 阅读 · 0 评论 -
boost bind
bind并不是一个单独的类或函数,而是非常庞大的家族,依据绑定的参数个数和要绑定的调用对象类型,总共有十个不同的形式,但它们的名字都叫bind.bind接受的第一个参数必须是一个可调用对象f,包括函数,函数指针,函数对象和成员函数,之后bind接受最多9个参数,参数的数量必须与f的参数数量相等_1,_2这些一直可以到9,是占位符,必须在绑定表达式中提供函数要求的所有参数,无论是真实参数还是...原创 2011-06-07 15:28:46 · 112 阅读 · 0 评论 -
boost reference_wrapper
reference_wrapper是一个引用类型的包装器[code="c++"]template class reference_wrapper{public: typedef T type;#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, < 1300 ) explicit referen...原创 2011-06-05 21:07:26 · 214 阅读 · 0 评论 -
元编程
元编程的最大特点在于:某些用户自定义的计算可以在程序翻译期进行,可以得到优化和接口简单性。在类声明的内部可以使用枚举值和静态常量成员。但静态常量成员必须是左值。当通过引用传递枚举值时,并不会使用任何静态内存,就像是以文字常量的形式传递这个完成计算的值一样。[code="c++"]#include"pow.h"#includeusing namespace std;tem...原创 2011-06-02 22:46:08 · 86 阅读 · 0 评论 -
参数化虚拟性
[code="c++"]#includeusing namespace std;class NotVirtual{ void foo(){ }};class Virtual{public: virtual void foo(){ }};templateclass Base:private VBase{...原创 2011-06-02 22:17:13 · 155 阅读 · 0 评论 -
boost any与variant
any:是一种只能容纳一个元素的容器,但这个元素可以是任意类型(int,string,stl容器和任何自定义类型).程序可以用any保存任意的数据。any不是一个模板类,本身不提供任何对内部元素的访问函数,而是使用了一个友元函数any_cast()[code="c++"]#include#include#include#include#includeusing na...原创 2011-05-31 15:55:01 · 275 阅读 · 0 评论 -
traits
[code="c++"]#includeusing namespace std;templateclass AccumulationTraits{public: typedef T AccT; static const AccT zero=0;};templateclass AccumulationTraits{public:...原创 2011-05-30 16:43:47 · 96 阅读 · 0 评论 -
时间与日期
一.boost::timer1.timer一旦被声明,它的构造函数就启动了计时工作,之后就可以随时用elapsed()函数简单地测量自对象创建后所流逝的时间。当有些代码需要优化时,用它来测试提速了多少很不错。2.但是timer不适合高精度的时间测量任务,它的精度依赖于操作系统或编译器,难以做到跨平台[code="c++"]#include#includeusing name...原创 2011-04-05 16:47:28 · 126 阅读 · 0 评论 -
boost前言
打算学习下模板,boost,元编程。相关文章,代码基于C++ Template,C++模板元编程,和国人的Boost程序库完全开发指南,这本书讲的很实在,给它免费打下广告,我乐意,哈哈!...原创 2011-04-05 17:00:51 · 96 阅读 · 0 评论 -
RAII
RAII(资源获取即初始化,Resource Acquisition Is Initialization),在使用资源的类的构造函数中申请资源,然后使用,最后在析构函数中翻译资源原创 2011-04-05 17:29:14 · 99 阅读 · 0 评论 -
program_options读命令行和配置文件
#include #include #include #include #include using namespace std;using namespace boost;namespace bpo = boost::program_options;/*config.ini:p2p-endpoint = 0.0.0.1:31010rpc...原创 2018-07-27 11:30:21 · 623 阅读 · 0 评论 -
GC的改良
分代回收:对分配不久,诞生时间较短的“年龄”对象进行重点扫描,应该就可以更有效地回收大部分垃圾。按照生成时间进行分代,刚刚生成不久的年轻对象划为新生代,而存活了较长时间的对象划为老生代。根据具体实现方式的不同,可能还会划分更多的代。首先从根开始一次常规扫描,找到存活的对象,这个步骤采用标记清除或者是复制收集算法都可以,不过大多数分代回收的实现,都采用了复制收集算法。需要注意的是,在扫描的过...原创 2013-10-17 22:05:38 · 112 阅读 · 0 评论 -
GC与引用记数
根(Root)就是判断对象是否可被引用的起始点。至于哪里才是根,不同的语言和编译器都有不同的规定,但基本上是将变量和运行栈空间作为根。GC的三种基本方式1.标记清除:从根开始将可能被引用的对象用递归的方式进行标记,然后将没有标记到的对象作为垃圾进行回收。1.1标记压缩(标记清除的变形):将标记的对象不断压缩标记清除有一个缺点:分配了大量对象,并且其中只有一小部分存活的情况下...原创 2013-10-16 21:57:04 · 136 阅读 · 0 评论 -
centos下boost安装
./booststarp.sh //这里的一些错误不用管./b2 –a //全部安装(开始一堆错误,看各个的错误就知道了)./b2 install安装asio./bjam --with-system --with-thread --with-date_time --with-regex --with-serialization stage设置环境变量在/etc...原创 2014-03-27 09:28:27 · 285 阅读 · 0 评论 -
weak_ptr
weak_ptr是为配合shared_ptr而引入的一种智能指针来协助shared_ptr工作,它可以从一个shared_ptr或另一个weak_ptr对象构造,它的构造和析构不会引起引用记数的增加或减少。没有重载*和->但可以使用lock获得一个可用的shared_ptr对象[code="c++"]template class weak_ptr{public: weak...原创 2011-04-08 23:09:05 · 85 阅读 · 0 评论 -
shared_ptr
shared_ptr早期叫做counted_ptr,它实现了引用计数型的智能指针,与scoped_ptr一样包装了new操作符在堆上分配的动态对象,但可以被自由地拷贝和赋值。同时它弥补了auto_ptr因为转移语义而不能把指针作为STL容器元素的缺陷。share_ptr是强引用,像铁丝绑住堆上的对象,只要有一个指向x对象的shared_ptr存在,该x对象就不会析构,它是原子操作,没有用锁...原创 2011-04-07 22:06:17 · 101 阅读 · 0 评论 -
scoped_ptr
scoped_ptr是一个很类似auto_ptr的智能指针,它包装了new操作符在堆上分配的动态对象,能够保证动态创建的对象在任何时候都可以被正确的删除,但很重要的一点是scoped_ptr获取了对象的管理权,就无法再从它那里取回来它只在对象析构的时候释放一次,对象析构的时候自动释放内存source code[code="c++"]templateclass scope...原创 2011-04-05 18:01:02 · 144 阅读 · 0 评论 -
智能指针
为啥想学boost呢,因为它名气大?其实主要还是因为工作中有不要地方用到了不少智能指针,bind等一些东西,想直接完全理解起来还有点难。boost.smart_ptr库提供了六种智能指针,包括scoped_ptr,scoped_array,shared_ptr,shared_array,weak_ptr和instrusive_ptr,来增强std::auto_ptr,而且是异常安全的。它们都很...原创 2011-04-05 17:35:01 · 124 阅读 · 0 评论 -
动静多态
由于继承||虚函数在运行期进程处理,这种多态叫动多态。模板允许我们使用单一的泛型标记,来关联不同的特定行为:但这种关联是在编译期进行处理的,这些借助于模板的多态称为静多态[code="c++"]#includeusing namespace std;class A{public: virtual void fun()=0;};class A1:pu...原创 2011-05-30 15:40:13 · 189 阅读 · 0 评论 -
局部特化
局部特化并不会引入一个新的模板,它只对原来模板(基本模板)进行扩展。当查找类模板的时候,刚开始只会考虑基本模板。然而,如果在选择了基本模板之后,还发现了一个”模板实参能够和实例化体的模板实参进行完全模式匹配“的局部特化,那么将会实例化该局部特化的定义,而不再实例化基本模板的定义。[code="c++"]#includeusing namespace std;//基本模板temp...原创 2011-05-29 16:27:29 · 112 阅读 · 0 评论 -
类模板与模板类
1.类模板:该类是一个模板,他代表的是:整个类家族的参数化描述。 template//侧重Tclass A{};2.模板类:通常被用在下面几个方面: templateclass B{//侧重类B}; 作为类模板的同义词 从模板产生的类 具有一个template-id名称的类...原创 2011-05-29 16:08:22 · 94 阅读 · 0 评论 -
零初始化
[code="c++"]templatevoid f(){ T t = T();//如果T是内建类型,x是0或者false}templateclass A{ T t;public: A():t(){//确认t已被初始化,内建类型对象也是如此 }};[/code]...原创 2011-05-03 16:45:27 · 123 阅读 · 0 评论 -
继承一个模板类要用this访问基类
对于那些在基类中声明,并且依赖于模板参数的符号(函数或者变量等),应该在它们前面使用this->或者Base::[code="c++"]#includethisusing namespace std;templateclass A{public: void f(){ cout ,除非B中也有一个f(),那么调用的就是B::f() ...原创 2011-05-03 16:39:28 · 410 阅读 · 0 评论 -
非类型模板参数
模板可以具有值模板参数,而不仅仅是类型模板参数对于非类型模板参数,你不能使用浮点,class类型的对象和内部链接对象(string...)作为实参原创 2011-04-25 22:54:21 · 137 阅读 · 0 评论 -
boost assign
[code="c++"]#include#include#include#include#include#includeusing namespace std;using namespace boost::assign;template void print(const T& t){ typename T::const_iterator i...原创 2011-04-20 00:01:17 · 93 阅读 · 0 评论 -
模板初探
[code="c++"]#include//using namespace std;inline int max1(int i1,int i2){ return ::max(i1,i2);}templateconst T& max(const T& t1,const T& t2){ return t1>t2?t1:t2;}int ma...原创 2011-04-18 22:47:03 · 103 阅读 · 0 评论 -
boost singleton_pool与pool_alloc
[code="c++"]//Tag仅仅是用于标记不同的单件,可以是空类,甚至是声明//第二个参数RequestedSize等同于pool构造函数中的整数requested_size,指示分配内存块的大小templateclass singleton_pool{public: static bool is_from(void * ptr); static ...原创 2011-04-17 10:34:28 · 229 阅读 · 0 评论 -
pool对象内存池(object_pool)
[code="c++"]//模板类型参数ElementType指定了要分配的元素类型,该实例不能再用于分配其它类型的对象templateclass object_pool:protected pool{public: object_pool(); ~object_pool(); //malloc和free并不会调用类的构造函数和析构函数 ...原创 2011-04-17 09:46:17 · 135 阅读 · 0 评论 -
boost内存池(pool)
[code="c++"]templateclass pool{public: //接受一个size_type类型的整数,指示每次分配内存块的大小(不是内存池的大小) explicit pool(size_type requested_size); ~pool(); //返回requested_size size_type get_r...原创 2011-04-17 09:21:58 · 188 阅读 · 0 评论 -
使用字符串作为函数模板实参
对于非引用类型的参数,在实参演绎的过程中,会出现数组到指针(array-to-pointer)的类型转换(这种转型通常也被称为decay(退化))[code="c++"]#include#includeusing namespace std;/* 比较两个字符串的地址,而不是它们的字典顺序,这也是我们趋向使用如std::string的字符串类, 而不使用C风格字...原创 2011-05-03 17:00:13 · 346 阅读 · 0 评论 -
模板参数与模板实参
模板参数:位于模板声明或定义内部,关键字template后面所列举的名称模板实参:用来替换模板参数的各个对象。和模板参数不同的是,模板实参可以有多种类型和值。[code="c++"]template//T和N就是模板参数class ArrayInClass{ public: T array[N];};ArrayInClass//double,...原创 2011-05-06 17:50:48 · 853 阅读 · 0 评论 -
SHA1摘要算法
[code="c++"]#include #include #include using namespace std;using namespace boost::uuids::detail;int main(){ sha1 sha; char *szMsg = "a short message"; sha.process_byte(0x1...原创 2011-05-10 16:34:39 · 185 阅读 · 0 评论 -
boost tuple
tuple(元组):定义了一个有固定数目元素的容器,其中的每个元素类型都可以不相同,这与其他容器有着本质的区别。它是std::pair的泛化,可以从函数返回任意数值的值。tuple默认最多支持10个模板类型参数,也就是说它最多能容纳10个不同类型的元素。tie()可以方便地利用现有普通变量创建一个可赋值的tuple对象,因此可以对tuple执行"解包"操作.[code="c++...原创 2011-05-27 15:03:51 · 139 阅读 · 0 评论 -
boost array
array本质上是一个对静态数组的包装,没有构造函数,不能指定大小,不能动态增长[code="c++"]templateclass array{public: T elems[N]; //迭代器的首指针,末指针加1 iterator begin(); iterator end(); reference operator[](...原创 2011-05-27 00:06:18 · 101 阅读 · 0 评论 -
单元测试
test库提供了一个最小化的测试套件minimal test.头文件中已经实现了一个main(),测试时只需要实现一个叫做test_main()的函数。在test_main()里有四个测试断言宏:BOOST_CHECK(predicate):断言测试通过,不通过不影响程序执行BOOST_REQUIRE(predicate):要求测试必须通过,否则程序无法继续执行BOOST_ERROR(...原创 2011-05-23 22:00:29 · 95 阅读 · 0 评论 -
boost StaticAssert
static_assert库把断言的诊断时刻由运行期提前到编译期,让编译器检查可能发生的错误,能更好的增加程序的健壮性[code="c++"]#include#includeusing namespace std;templateT my_min(T a,T b){ //invalid application of ‘sizeof’ to incomplete...原创 2011-05-23 21:42:31 · 143 阅读 · 0 评论 -
boost正则表达式
xpressive是boost的正则表达式库,它比boost.regex要好的是它不需要编译,速度快。匹配(char*)[code="c++"]#include#includeusing namespace std;int main(){ using namespace boost::xpressive; char* str = "the...原创 2011-05-17 23:10:54 · 163 阅读 · 0 评论 -
为什么模板要写在.h里面
[code="c++"]//test.h template class A{ public: A(); void fun(); }; //test.cpp #include"test.h" template A::A(){} template void A::fun(){} main.cppint main()...原创 2011-05-13 18:02:54 · 248 阅读 · 0 评论