
C++学习
文章平均质量分 76
ToPDCA
Work hard for a better tomorrow, Play up !
展开
-
C++学习 boost学习之-Synchronization
要点:1 boost提供了如下lock模板类,以mutex类型作为模板参数Class templatelock_guardClass templateunique_lockClass templateshared_lockClass templateupgrade_lockClass templateupgrade_to_unique_lockMutex-spe转载 2015-05-21 09:37:22 · 558 阅读 · 0 评论 -
C++学习 boost学习之-function
要点:1 用于保存函数对象,本身是函数对象2 与bind一起使用,威力巨大:class command { boost::function f_;public: command() {} command(boost::function f):f_(f) {} void execute() { if (f_) { f_();转载 2015-05-21 10:31:08 · 677 阅读 · 0 评论 -
C++学习 boost学习之-Thread
要点:1 线程对象不可以复制,但是可以转移;2 当线程对象析构时,线程变为detached,但线程并未结束;也可以通过detach()方法来显示的detached;3 等待线程结束,可以用join() or timed_join()方法;4 可以调用interrupt()方法结束一个线程,线程会在运行到interruption points时抛出boost::thread_转载 2015-05-21 09:55:50 · 1035 阅读 · 0 评论 -
C++学习 boost学习之-BOOST_STATIC_ASSERT
Boost中文手册下载:http://download.youkuaiyun.com/detail/skdkjxy/8723045用法:1 编译器断言,同样在运行期通过断言检测程序正确性,但是该宏可以在编译器检查正确性2 由于编译器断言要求在编译器,断言的内容的值是能够计算出来的如:BOOST_STATIC_ASSERT(sizeof(int) 总结,也是比较有用的工具;转载 2015-05-21 10:52:38 · 625 阅读 · 0 评论 -
C++学习 boost学习之-lexical_cast
Boost中文手册下载:http://download.youkuaiyun.com/detail/skdkjxy/8723045用法:1 lexical_cast 想象为使用一个 std::stringstream 作为字符串与数值的表示之间的翻译器2 转换对象必须重载输入输出操作符3 如果转换有问题,会抛出异常4 一般用途:从字符串类型到数值类型的转换从数值类型到字转载 2015-05-21 10:53:52 · 761 阅读 · 0 评论 -
C++学习 boost学习之-Lambda
要点:1 c++是面向对象的语言,尽量把所以一切东西看成对象,包括数据类型,函数,表达式,所以把这些东西转换为对象时非常关键的, boost基本上就是把什么都看做是对象来处理,这样把一般函数或表达式转化为函数对象很重要,同前一次说的bind,和这一次要学习 的lambda,本质的作用就是把函数或表达式转换为函数对象;lambda可以把表达式转换为函数对象,避免了程序中写很多仿转载 2015-05-21 10:33:16 · 699 阅读 · 0 评论 -
C++学习 boost学习之-Variant
用法:1 他与c语言中的union相对应2 通过模板参数定义可以支持的类型3 通过boost::get()进行访问4 可通过boost::static_visitor与boost::apply_visitor(visitor, variant).的组合来访问总结,目前还没想到这个有什么很好的用处;看例子体会用法:class print_visitor : pub转载 2015-05-21 10:39:16 · 1515 阅读 · 0 评论 -
C++学习 boost学习之-Regex
用法:1 提供列正则表达式的匹配,寻找和替换功能2 匹配用法 boost::regex reg("."); assert(boost::regex_match(“a”,reg)==true);3 查找用法 boost::regex reg("(xxx))");boost::smatch m;std::string s="Calls to xxx. \转载 2015-05-21 10:42:32 · 1302 阅读 · 0 评论 -
C++学习 boost学习之checked_delete
用法:删除一个动态分配的对象时,必须调用它的析构函数。如果这个类型是不完整的,即只有声明没有定义,那么析构函数可能会没被调用。这是一种潜在的危险状态,所以应该避免它。对于类模板及函数模板,风险会更大,因为无法预先知道会使用什么类型。使用checked_delete 和 checked_array_delete, 可以解决这个删除不完整类型的问题。它没有运行期的额外开销,只是直接调用转载 2015-05-21 10:48:32 · 633 阅读 · 0 评论 -
C++学习 boost学习之-any
Boost中文手册下载:http://download.youkuaiyun.com/detail/skdkjxy/8723045用法:1 内部原理:通过模板类型的构造函数来实现2 通过any_cast来转换为真实的类型3 通过any_cast转换指针,如果失败返回空4 通过any_cast转换引用,失败抛出异常抛出异常代表非预料性错误,返回空不代表错误;转载 2015-05-21 10:41:40 · 542 阅读 · 0 评论 -
C++学习 boost学习之-noncopyable
Boost中文手册下载:http://download.youkuaiyun.com/detail/skdkjxy/8723045用法:1 私有派生于noncopyable的类都不能复制和赋值2 原理是:noncopyable内部禁止了赋值和复制3 该类可以被很好被复用,减少工作量,不用把想要禁止赋值和复制的类都自行定义私有的赋值和复制方法,只需从该类派生即可4 什么情况下我们需要自定义复转载 2015-05-21 10:48:17 · 1097 阅读 · 0 评论 -
C++学习 boost::apply_visitor说明
函数 apply_visitorboost::apply_visitor — 将给定的访问者应用到给定的 variant 的内容上,该过程在编译期进行类型安全检查,以确认所有类型均被访问者所处理。摘要templatetypename Visitor, typename Variant> typename Visitor::result_type appl转载 2015-05-21 09:12:20 · 9670 阅读 · 0 评论 -
C++学习 boost学习之-Signals
要点:1 函数和函数对象的灵活多点回调2健壮的触发器及事件处理的机制3兼容于函数对象工厂,如 Boost.Bind和 Boost.Lambda4 Boost.Signals 库具体化了信号(signals)和插槽(slots),信号指的是某种可被"抛出"的东西,而插槽是接收该信号的连接者。这是一种著名的设计模式,它还有另外一些名字Observer, signals/sl转载 2015-05-21 10:25:09 · 1006 阅读 · 0 评论 -
C++学习 boost学习之-生产者消费者问题例子
生产者消费者问题在线程编程中是基础问题,很重要,很多其他问题的解决都通过扩展该问题的解决方法来解决的;boost中的一个例子是这样写的,很简洁;所以boost很强大,屏蔽掉了很多繁琐的问题;#include #include #include #include #include class bounded_buffer : private boost::noncop转载 2015-05-21 09:34:20 · 1833 阅读 · 0 评论 -
C++学习 boost学习之-bind
要点:1 是标准库中bind1st和bind2st的扩展,功能更强大2 他是一个创建函数对象的工具,而函数对象时标准库的算法需要的,所以bind提供了方便创建函数对象的功能3 使用bind的代码更简洁,易懂,较标准库的mem_fun,mem_fun_ref等好用4 bind的占位符_1,_2...对普通函数最多有9个,对于成员函数仅支持8个,第一个参数是类的this指针5 bi转载 2015-05-21 10:35:59 · 492 阅读 · 0 评论 -
C++学习 boost学习之-enable_if
Boost中文手册下载:http://download.youkuaiyun.com/detail/skdkjxy/8723045用法:1 你需要在把一个符合某些条件的函数加入到或排除出重载决议集合中。你需要根据某个条件将一个类模板的特化版本加入到或排除出特化集合中。2 实现方法,看如下例子: void some_func(int i){ st转载 2015-05-21 10:46:21 · 2045 阅读 · 0 评论 -
C++学习 boost学习之addressof
用法:1 要获得一个对象的真实地址请用addressof,而非operator&,2 addressof会绕过operator&而取得真实地址没什么好说的,取对象地址最安全做法就是用这个了!转载 2015-05-21 10:46:42 · 537 阅读 · 0 评论 -
C++学习 boost学习之-Filesystem
要点:1 头文件 #include "boost/filesystem.hpp" // includes all needed Boost.Filesystem declarations #include // for std::cout using boost::filesystem;2 在path.hpp中定义了路径类 a 支持多种编码格式,包括uni转载 2015-05-21 10:07:28 · 835 阅读 · 0 评论 -
C++学习 boost学习之-Tuples
要点:1 是标准库中std::pair的扩展,只不过pair是一个2-tuple2 tuple最多可以支持10个元素3 tuple较结构体相比,更容易声明,定义和使用;4 与std::make_pair相对应的有boost::make_tuple5 访问tuple boost::tuple triple(42,3.14,"The amazing tuple!")转载 2015-05-21 10:36:51 · 743 阅读 · 0 评论 -
C++学习 boost学习之-Operators
Boost中文手册下载:http://download.youkuaiyun.com/detail/skdkjxy/8723045用法:1 c++一个重要的功能是复用,避免写重复代码,而boost为自定义类的operator的实现代码提供了复用实现2 operator重载中,有这样一个事实:多数运算符重载实现中可以通过调用少数的运算符重载函数来实现 如 下:下面的实现,都是通过两个运算符转载 2015-05-21 10:44:47 · 599 阅读 · 0 评论 -
C++学习 boost学习之-shared_ptr
Boost中文手册下载:http://download.youkuaiyun.com/detail/skdkjxy/8723045用法:1 shared_ptr是具有引用计数功能的指针,一般用于复制操作很昂贵,或代表的东西被多个东西共享; 引用计数功能分为侵入式和非侵入式,侵入式要求类提供增加或减少计数的函数或数据成员,而非侵入式的没有这方面要求2 可以在构造时传入删除器,使用自己的转载 2015-05-27 14:20:50 · 892 阅读 · 0 评论 -
C++学习 boost学习之-shared_array
Boost中文手册下载:http://download.youkuaiyun.com/detail/skdkjxy/8723045用法: 1 用于共享数组所有权的智能指针 2 用于数组而不是单个对象 3 std::vector的shared_ptr提供了比shared_array更多的灵活性综上,个人认为shared_array价值不大,不如用std::vector的shar转载 2015-05-27 14:20:52 · 1475 阅读 · 0 评论 -
C++学习 boost学习之-intrusive_ptr
Boost中文手册下载:http://download.youkuaiyun.com/detail/skdkjxy/8723045用法:1 与share_ptr功能上是一样的,只不过引用计数是采用侵入式实现的,尽量避免使用,除非:已有代码使用或提供了插入式的引用计数智能指针的大小必须与裸指针的大小相等需要把 this 当作智能指针来使用时(this是智能指针的this)2 需要你转载 2015-05-27 14:22:28 · 1947 阅读 · 0 评论 -
C++学习 C/C++之回调函数
在理解“回调函数”之前,首先讨论下函数指针的概念。函数指针(1)概念:指针是一个变量,是用来指向内存地址的。一个程序运行时,所有和运行相关的物件都是需要加载到内存中,这就决定了程序运行时的任何物件都可以用指针来指向它。函数是存放在内存代码区域内的,它们同样有地址,因此同样可以用指针来存取函数,把这种指向函数入口地址的指针称为函数指针。(2)先来看一个Hello World程序:转载 2015-07-15 18:26:37 · 684 阅读 · 0 评论 -
ceph存储 Linux远程操作(rcp/rsh)命令实战
1. rcp1.1为使用 rcp 做准备要使用 rcp,需要具备以下条件:(1)如果系统中有 /etc/hosts 文件,系统管理员应确保该文件包含要与之进行通信的远程主机的项。/etc/hosts 文件中有一行文字,其中包含每个远程系统的以下信息:internet_address official_name alias例如:9.18转载 2015-07-20 10:41:20 · 1954 阅读 · 0 评论 -
ceph存储 Eclipse常用快捷键
编辑快捷键 【ALT+/】 显示代码提示,以及代码自动补全功能。 【Ctrl+/】 添加注释 【Ctrl+D】 删除当前行 窗口快捷键 【Ctrl+M】 窗口最大化和还原 查看和定位快捷键 1. 【Ctrl+K】、【Ctrl+Shift+K】 快速向下和向上查找选定的内容,从此不再需要用鼠标单击查找对话框转载 2015-07-30 16:49:39 · 663 阅读 · 0 评论 -
极力推荐 自学视频java、php、python、android!
自学java php pyhton android 最好的视频连接:http://pan.baidu.com/share/home?uk=2483301048搜索复制原创 2015-06-17 23:19:52 · 1528 阅读 · 1 评论 -
ceph存储 缓存淘汰算法--LRU算法
1. LRU1.1. 原理LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。1.2. 实现最常见的实现是使用一个链表保存缓存数据,详细算法实现如下:1. 新数据插入到链表头部;2. 每当缓存命中(即缓存数据被访问),则将数据移到链表头部;3转载 2016-04-25 17:05:52 · 2301 阅读 · 0 评论 -
ceph存储 ceph源码中自定义PerfCounters添加步骤
PerfCounters添加步骤,以FileStore为例:1、ObjectStore中有enum枚举,注意枚举中的第一个元素与最后一个元素,这是给PerfCountersBuilder使用的!enum { l_os_first = 84000, l_os_jq_max_ops, ... l_os_queue_lat, l_os_nc_used_byt原创 2016-08-03 19:21:32 · 1688 阅读 · 0 评论 -
ceph存储 ceph源码调试中admin_socket接口
各位好,其中JSONFormatter与XMLFormatter均继承与Formatter这个格式基类,Formatter在源码调试或者性能调优中起到很重要的作用,值得细细研究。原创 2016-08-03 19:16:38 · 2433 阅读 · 0 评论 -
嵌入式 __sync_fetch_and_add系列函数
__sync_fetch_and_add系列的命令,发现这个系列命令讲的最好的一篇文章,英文好的同学可以直接去看原文。Multithreaded simple data type access and atomic variables __sync_fetch_and_add系列一共有十二个函数,有加/减/与/或/异或/等函数的原子性操作函数,__sync_fetch_and_add,顾转载 2016-10-14 19:07:57 · 1283 阅读 · 0 评论 -
C++学习 可变参数的宏定义小技巧
printf()和fprintf()这些输出函数的参数是可变的,在调试程序时,你可能希望定义自己的参数可变的输出函数,那么可变参数宏会是一个选择。C99中规定宏可以像函数一样带有可变参数,比如#define LOG(format, ...) fprintf(stdout, format, __VA_ARGS__)其中,...表示参数可变,__VA_ARGS__在预处理中为实转载 2015-07-13 10:03:01 · 6179 阅读 · 0 评论 -
C++学习 文件读写详解(ofstream,ifstream,fstream)
在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结:这里主要是讨论fstream的内容:[java] view plaincopyprint?#include ofstream //文件写转载 2015-07-10 16:30:32 · 671 阅读 · 0 评论 -
C++学习 boost学习之-numeric_cast
Boost中文手册下载:http://download.youkuaiyun.com/detail/skdkjxy/8723045用法:1 不同类型之间进行转换时,尽量使用numeric_cast,他会检查数据的范围,如果有问题会抛出异常2 对浮点数类型,不会抛出异常,会产生截断3 原则在无符号与有符号类型间进行赋值或比较时在不同大小的整数类型间进行赋值或比较时从一个函数返回类转载 2015-05-27 14:21:04 · 1292 阅读 · 0 评论 -
C++学习 boost学习之-weak_ptr
Boost中文手册下载:http://download.youkuaiyun.com/detail/skdkjxy/8723045用法:1 weak_ptr是share_ptr的观察者,打破递归的依赖关系,旁观一个共享资源而不能拥有所有权,或者为了避免悬空指针2 weak_ptr 不对它所观察的指针提供重载的 operator* 和operator->,所以要访问观察指针,需要转换回share转载 2015-05-27 14:22:30 · 651 阅读 · 0 评论 -
C++学习 boost::optional详解
optional: optional库使用"容器"语义,包装了"可能产生无效值"的对象,实现了"未初始化"的概念.#include using namespace boost;"无意义"的值: 函数并不总能返回有效的返回值,很多时候函数可能返回"无意义"的值,这不意味着函数执行失败,而是表明函数正确执行了,但结果却不是有用的值。 表示返回值无意义最常用的做法是增加一个"哨兵转载 2015-06-16 16:42:34 · 13083 阅读 · 0 评论 -
ceph存储 状态机思路在程序设计中的应用
状态机思路在单片机程序设计中的应用状态机的概念状态机是软件编程中的一个重要概念。比这个概念更重要的是对它的灵活应用。在一个思路清晰而且高效的程序中,必然有状态机的身影浮现。比如说一个按键命令解析程序,就可以被看做状态机:本来在A状态下,触发一个按键后切换到了B状态;再触发另一个键后切换到C状态,或者返回到A状态。这就是最简单的按键状态机例子。实际的按键解析程序会比这更复杂些转载 2015-05-29 09:43:54 · 1113 阅读 · 0 评论 -
C++学习 Boost状态机说明statechart
1. 状态 对象在其生命周期内,所处于的运动和发展阶段。例如:人可以处于工作中这个状态,也可以处于娱乐中状态。状态应该有上下文环境。例如:人处于工作中状态,要属于职业生涯状态而不能是退休状态,也必须是活着的,而不能是死亡的状态。状态可以有子状态。例如:工作中状态,可以有开会中,会客中,被训斥中等子状态。2. 状态机由许多相关状态构成的集合。把一个对象,或者一个系统看做是一个转载 2015-05-29 10:03:39 · 10908 阅读 · 3 评论 -
C++学习 C++学习之Pair
Pair类型概述pair是一种模板类型,其中包含两个数据值,两个数据的类型可以不同,基本的定义如下:pair aa;pair a;表示a中有两个类型,第一个元素是int型的,第二个元素是string类型的,如果创建pair的时候没有对其进行初始化,则调用默认构造函数对其初始化。 pair a("James", "Joy");也可以像上面一样在定义的时候直接对其初始化。转载 2015-06-02 11:25:34 · 616 阅读 · 0 评论 -
嵌入式 Linux线程同步读写锁rwlock示例
读写锁比mutex有更高的适用性,可以多个线程同时占用读模式的读写锁,但是只能一个线程占用写模式的读写锁。1. 当读写锁是写加锁状态时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞;2. 当读写锁在读加锁状态时,所有试图以读模式对它进行加锁的线程都可以得到访问权,但是以写模式对它进行枷锁的线程将阻塞;3. 当读写锁在读模式锁状态时,如果有另外线程试图以写模式加锁,读写锁通常转载 2015-06-11 10:33:12 · 771 阅读 · 0 评论