随笔分类 -  C++是促进脑死亡的最佳方式

1
摘要:C++的前置声明 C++前置声明,这玩意看起是不是超级简单? 我们来看几个问题: 模板怎么前置声明 typedef怎么前置声明 模板的typedef 怎么前置声明 是不是还是比较头疼的。 模板怎么声明 //a.h template<typename T> class buffer_pool { }; 阅读全文
posted @ 2022-11-02 01:39 fullsail 阅读(60) 评论(0) 推荐(0) 编辑
摘要:一段通信协议的代码,早年在GCC 4.4。VS2013下编译都挺好的,移植到GCC 4.8 ,为C++ 11做准备,在编译的时候发现问题 源代码省略后的版本如下: GCC(G++) 4.8编译提示的错误如下, soar_zerg_frame.h:260:17: error: non-placemen 阅读全文
posted @ 2015-02-14 21:52 fullsail 阅读(1721) 评论(2) 推荐(0) 编辑
摘要:scanf,sscanf利用format跳过干扰的空格用了一点时间做读取配置部分的代码,希望一次记录上读取N个数据,希望读取的格式就是一个IP地址加上端口号,希望把IP地址读取到4个短整数里面,端口号读取到另外的一个短整数。文字格式类似“192.120.1.120#8080”,但结果发现因为为了对齐... 阅读全文
posted @ 2015-02-11 01:37 fullsail 阅读(15323) 评论(0) 推荐(0) 编辑
摘要:Protocol Buffers编码详解,例子,图解本文不是让你掌握protobuf的使用,而是以超级细致的例子的方式分析protobuf的编码设计。通过此文你可以了解protobuf的数据压缩能力来自什么地方,版本兼容如何做到的,其Key-Value编码的设计思路。如果你详细了解此文,你应该就能具... 阅读全文
posted @ 2015-01-13 01:59 fullsail 阅读(7674) 评论(7) 推荐(4) 编辑
摘要:LuaTinker的bug和缺陷 LuaTinker是一套还不错的C++代码和Lua代码的绑定库,作者是韩国人Kwon-il Lee,作者应该是参考了LuaBind后,为了简化和避免过重而实现的。其官网在http://gpgstudy.com/gpgiki/LuaTinker ,但可惜全部是韩文的,... 阅读全文
posted @ 2014-12-30 01:25 fullsail 阅读(2694) 评论(0) 推荐(2) 编辑
摘要:编译器对C++ 11变参模板(Variadic Template)的函数包扩展实现的差异 题目挺绕口的。C++ 11的好东西不算太多,但变参模板(Variadic Template)肯定是其中耀眼的一颗明星,在C++设计新思维中,你可以看到很多模版的代码为了支持不确定的参数个数,而要重载1个参数到N... 阅读全文
posted @ 2014-07-27 23:22 fullsail 阅读(1444) 评论(0) 推荐(2) 编辑
摘要:最近在看Luatinker的源代码,打算自己改(仿写)写搞一个简单的封装C++和LUA的结合的库,结果发现其实麻烦和困惑比想象的多。比如这些点:1)有时候使用模板的时候,引用会退化。classtype &,经过模板参数后,会退化为class type,这个在LuaTinker的实现里面就有问题,你会... 阅读全文
posted @ 2014-06-10 03:25 fullsail 阅读(1950) 评论(3) 推荐(2) 编辑
摘要:当年实现自己的共享内存模板的时候,map和set的没有实现,本来考虑用一个AVLTree作为底层实现的,为啥,因为我当时的数据结构知识里面我和RBTree不熟,只搞过AVLTree,但当时我一直没有看过删除如何实现。结果Scottxu跳出来,参考STLport的实现,迅速用RBTree搞掂了。搞得这... 阅读全文
posted @ 2014-05-15 00:11 fullsail 阅读(2479) 评论(1) 推荐(2) 编辑
摘要:写代码有时候和笃信宗教一样,一旦信仰崩溃,是最难受的事情。早年我读过云风的一篇《VC 对 memcpy 的优化》,以及《Efficiency geek 2: copying data in C/C++, optimisation》,所以我是坚信很难能写出比C运行时库更快的memcpy的。但最近有两个... 阅读全文
posted @ 2013-06-28 02:04 fullsail 阅读(10442) 评论(8) 推荐(6) 编辑
摘要:从密码学的角度分析了TX的TEA算法,另外,本着一个性能偏执狂的角度,分析了这个实现的几个性能优化点。最好稍微YY了一下TEA的安全性。 阅读全文
posted @ 2013-04-29 23:55 fullsail 阅读(7771) 评论(5) 推荐(3) 编辑
摘要:当然这个的确有点难为编译器了。但的确应该是编译器的bug,上代码。编译环境visual studio 2010, SP1版本。 1 namespace ZEN_LIB 2 { 3 4 5 template<typename HASH_STRATEGY> 6 inline unsigned char *hash_fun(const unsigned char *buf, 7 size_t size, 8 unsigned char result[HASH_STRATEGY::HASH_RESULT_SIZE]) 9 {10 ZEN_ASSERT(result != N... 阅读全文
posted @ 2013-02-23 23:01 fullsail 阅读(1206) 评论(1) 推荐(0) 编辑
摘要:本文对MD5和SHA1算法做了较为详细的解释,也解释了一下为什么部分开源代码较为难以阅读。同时提供了非常清晰的源码。 阅读全文
posted @ 2013-02-22 03:12 fullsail 阅读(25745) 评论(4) 推荐(5) 编辑
摘要:最近在看一些同步对象模拟的东东,特别对在Windows下如何模拟条件变量折腾了很久。1 Windows同步对象Event微软有一个很有意思的同步对象,某种程度上和Linux的条件变量很相似。但秉承微软一贯的作风,有些地方设计的又有点怪异。Event通过函数CreateMutex创建,可以分为手动模式和自动模式两种模式,两种模式下表现迥异。和其他同步对象一样,在WaitForSingleObject或者WaitForMultipleObjects等待激发。激发(取消激发)法有3个函数SetEvent,ResetEvent,PulseEvent根据模式不同给出说明如下表:自动模式手动模式SetEv 阅读全文
posted @ 2013-01-25 00:54 fullsail 阅读(2105) 评论(0) 推荐(0) 编辑
摘要:本文用于探讨在共享内存中使用容器的好处,以及几种在共享内存中C++模板容器的方法。1 为什么要在共享内存中使用模板容器?为什么要避开普通内存而选择共享内存,那肯定是使用共享内存的优势:l 共享内存可以在多进程间共享,到达进程间通信的方式。l 共享内存可以在进程的生命周期以外仍然存在。这就可以保证在短暂停止服务(服务进程coredump,更新变更)后,服务进程仍然可以继续使用这些共享内存的数据。如果这些优势在加上C++容器模板使用方便,开发快速的优势,无疑是双剑合璧,成为服务器开发的利刃。2 在共享内存中使用模板容器最大难点是?但如果要要做到让容器在模板中使用,最大的麻烦是什么?就是指针。(同步 阅读全文
posted @ 2013-01-20 21:30 fullsail 阅读(4895) 评论(2) 推荐(3) 编辑
摘要:首先要说明,这个准确说并不是BOOST的singleton实现,而是BOOST的POOL库的singleton实现。BOOST库中其实有若干个singleton模版,这个只是其中一个。但网上大部分介绍的介绍的BOOST的Singleton实现都是这个,所以大家也就默认了。而且这个的确算是比较特殊和有趣的一个实现。网上比较有名的文章是这篇《2B程序员,普通程序员和文艺程序员的Singleton实现》 介绍,我虽然对Singleton模版无爱,但自己的项目组中也有人用这个实现,所以还是研究了一下这个实现,特别网上真正解释清楚这个东东的人并不多(包括原文),所以还是研究了一下。1 为啥2B实现有问题 阅读全文
posted @ 2013-01-03 00:50 fullsail 阅读(6308) 评论(4) 推荐(2) 编辑
摘要:一套使用OLE高效读取,(也有写入的功能)的C++封装,我原来也是根据CSDN上面的一个帖子的代码进行的改进。因为原来的一帖子,总有人找我要这套代码,特此公布出来。 阅读全文
posted @ 2012-12-28 22:06 fullsail 阅读(11165) 评论(4) 推荐(3) 编辑
摘要:本文描述VC++中的C语言使用代码文件描述符(file descriptor),和内核文件句柄HANDLE之间关系,以及两者之间的转换函数_get_osfhandle,_open_osfhandle以及使用他们的风险。在Windows代码中代码中间文件描述符号和内核句柄HANDLE千万不要共用。 阅读全文
posted @ 2012-10-21 02:31 fullsail 阅读(3054) 评论(0) 推荐(0) 编辑
摘要:模版策略化是使用模版参数实现策略化,将策略的行为决定时间放到了编译期,性能最优。但适合代码规模不大,或者本身就是模版代码使用,(追求酷代码)。同时由于是将策略决定时间放在了编译期,会在继承,大规模使用的时候也必须使用模版策略行为。从而使策略的影响扩大化。 多态策略化是使用多态方法决定策略行为,在运行时调用者通过参数决定使用什么多态行为,同时由于决定行为放在运行时,不需要相关代码做出多大改变就可以使用。不足是性能相较模版策略化要弱一点点,在运行是必须要调用者控制策略行为。 比较而言,我其实认为多态策略化有更好的应用场景。个人感觉,有些时候,过度的模版设计反而会降低代码的可用性,影响使用者。 阅读全文
posted @ 2012-07-31 00:05 fullsail 阅读(708) 评论(1) 推荐(0) 编辑
摘要:设计极其糟糕的select函数相较Windows而言,大部分UNIX API函数设计都比较考究,但也有少数简直就是奇葩,select函数正是这些奇葩中非常灿烂的一朵。我原来一致钟情于ACE,接触的只是reactor,最近由于开始自己设计网络层的类库,被迫和select打了一些交道,被迫和这个函数打了一些交道,结果只能是看着就吐了,吐着吐着就习惯了。UNIX下select这个API由主函数select和几个fd_set辅助函数构成。如下:int select(int nfds, fd_set *readfds, fd_set *writefds,fd_set *exceptfds, struct 阅读全文
posted @ 2011-11-06 22:41 fullsail 阅读(1117) 评论(2) 推荐(0) 编辑
摘要:VC++2010下编译STLport,Boost最近在想向Boost转移,努力掌握Boost代码的过程中,STLport版本:5.2.1Boost版本:1.4.6.1 (1.4.7.0也OK)编译器Visual Studio 2010STLPort的编译,选择Microsoft Visual Stu... 阅读全文
posted @ 2011-10-07 23:18 fullsail 阅读(5728) 评论(0) 推荐(0) 编辑

1