语法
upperflyer
做一朵太阳花
展开
-
do{...}while(0)的妙用
do{...}while(0)的妙用 在学习第一门编程语言时,就已经介绍了顺序分支、条件分支、循环分支。比如循环分支有for、while、do-while语句。在随后的学校及工作中,如果手工循环一般使用for、while,很少使用do-while,感觉用处不大,但现在看来,do-while大有用途。1. 帮助定义复杂的宏以避免错误举例来说,假设你需要定义这样一个宏:#defi...转载 2019-03-20 10:00:06 · 105 阅读 · 0 评论 -
简单的C++委托 —— 用模板类实现类成员函数的回调
template < class R , class P1 , class P2 > class IDelegate { public : virtual R Invoke( P1 , P2) = 0; }; template < class T , class R , class P1 , class P2 > class CDelegate : publ...转载 2019-03-26 14:28:10 · 747 阅读 · 0 评论 -
dynamic_cast彻底明白了~
dynamic_cast < type-id > ( expression)该运算符把expression转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void*;如果type-id是类指针类型,那么expression也必须是一个指针,如果type-id是一个引用,那么expression也必须...转载 2019-03-19 11:23:42 · 6365 阅读 · 2 评论 -
C++ clone()函数的用法
本文系转载,出处:设计模式学习笔记(原型模式)原型模式在C++中,要拷贝一个对象,除了自定义一个拷贝构造函数来实现对象复制外,还可以实现一个clone函数。这需要借助编译器实现的一个隐藏拷贝构造函数,这样的做法,更省心。背后的原理是C++的原型(Prototype)模式:用原型实例指定创建对象的种类,并...转载 2019-03-19 10:39:03 · 1667 阅读 · 0 评论 -
Google Protocol Buffer(protoc, protobuf, pb)学习笔记
以前玩 C,Json、XML 什么的看多了,现在开始玩 C++,才发现我了解的世界太小了——原来 C++ 届还有 Google Protocol Buffers 这么好的东西。果然在 PC 上做开发真是好,不用考虑可执行程序的 size,可以放心放肆地用 C++。ReferenceProtocol Buffer Basics: C++Google Protocol BuffersGoogle...转载 2019-03-22 09:51:24 · 781 阅读 · 0 评论 -
C++“准”标准库Boost学习指南(6):Boost.Any
Boost.AnyAny库支持类型安全地存储和获取任意类型的值。当你需要一个可变的类型时,有三种可能的解决方案:无限制的类型,如 void*. 这种方法不可能是类型安全的,应该象逃避灾难一样避免它。可变的类型,即支持多种类型的存储和获取的类型。支持转换的类型,如字符串类型与整数类型之间的转换。Any实现了第二种方案,一个基于值的可变化的类型,无限可能的类型。这个库通常用于把不同类型的...转载 2019-03-21 16:32:02 · 1119 阅读 · 0 评论 -
boost库中bind()和function()的使用方法
Boost::Function 是对函数指针的对象化封装,在概念上与广义上的回调函数类似。相对于函数指针,function除了使用自由函数,还可以使用函数对象,甚至是类的成员函数,这个就很强大了哈。1. 一个简单的示例代码?123456789101112131415161718192021...转载 2019-03-21 14:47:13 · 431 阅读 · 0 评论 -
boost.any实现任意类型存储
当你需要一个可变的类型时,有三种可能的解决方案:无限制的类型,如 void*. 这种方法不可能是类型安全的,应该象逃避灾难一样避免它。可变的类型,即支持多种类型的存储和获取的类型。支持转换的类型,如字符串类型与整数类型之间的转换。Any实现了第二种方案,一个基于值的可变化的类型,无限可能的类型。这个库通常用于把不同类型的东西存储到标准库的容...转载 2019-03-21 13:43:27 · 485 阅读 · 0 评论 -
Boost智能指针——shared_ptr
Boost智能指针——shared_ptrboost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限。顾名思义,boost::shared_ptr是可以共享所有权的智能指针,首先让我们通过一个例子看看它的基本用法:#include <string>#include <iostream&...转载 2019-03-21 13:37:20 · 108 阅读 · 0 评论 -
如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉
STL中的容器相当“聪明”,它们提供了迭代器,以便进行向后和向前的遍历(通过begin、end、rbegin等);它们告诉你所包含的元素类型(通过它们的value_type类型定义);在插入和删除的过程中,它们自己进行必要的内存管理;它们报告自己有多少对象,最多能容纳多少对象(分别通过size和max_size);当然,当它们自身被析构时,它们自动析构所包含的每个对象。有了这么“聪明”的容器,许...转载 2019-03-20 13:35:14 · 247 阅读 · 0 评论 -
STL容器里存放对象还是指针
&nbs...转载 2019-03-20 10:38:28 · 907 阅读 · 0 评论 -
C++实现反射(根据类名动态创建对象)
和网上大多数实现一样,这里也是采用工厂方法来实现对象的动态创建。大致原理为,创建一个单例工厂类,其中维护一个map(类名->对象创建函数)。创建对象时,传入类名,然后根据此类名查询出创建函数,最后创建对象。 ...转载 2019-06-12 10:36:34 · 583 阅读 · 0 评论