摘要: const用法总结从OSChina中看到一遍const用法总结,深感不错,特此转来。原文地址:http://my.oschina.net/sasa/blog/6994看到const 关键字,C++程序员首先想到的可能是const 常量。这可不是良好的条件反射。如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮。const 更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。const 是constant 的缩写,“恒定不变”的意思。被const 修饰的东西都受到强制保护,可以预防意外的变动,能提高程序的健壮性。所以很多C++程序设计书籍建议:“Use const when 阅读全文
posted @ 2012-03-26 11:18 kanego 阅读(370) 评论(0) 推荐(0) 编辑
摘要: 今天被同事问到一个问题,map中第三个参数的意思是什么,于是写了下面这个程序测试了一下。[cpp] view plaincopy#include<map>#include<iostream>usingnamespacestd;typedefmap<int,char>icMap;typedefmap<int,char>::iteratorIt;classfunc{public:func(){};booloperator()(constinti1,constinti2){returni1>i2;}};typedefmap<int,char 阅读全文
posted @ 2012-03-20 21:23 kanego 阅读(2865) 评论(0) 推荐(1) 编辑
摘要: 一. 回顾指针概念: 今天我们又要学习一个叫做指向另一指针地址的指针。让我们先回顾一下指针的概念吧! 当我们程序如下申明变量: short int i; char a; short int * pi; 程序会在内存某地址空间上为各变量开辟空间,如下图所示。 内存地址→6 78 9 10 111213 1415 ------------------------------------------------------------------------------------- …| ||||| |||| ----------------------------------... 阅读全文
posted @ 2012-03-18 19:46 kanego 阅读(728) 评论(0) 推荐(0) 编辑
摘要: 一般的书上都说,虚函数是在运行时根据对象的实际类型“动态决定”函数入口。但什么是“动态决定”呢?实际上C++编译器在实现这个功能的时候,并非真的 等到虚函数被调用时才去判断这个对象是什么类型的。下面我用一个简单的图表来说明C++编译器到底干了些什么。假设有两个类 struct Base { virtual void f(); virtual void g(); }; struct Derived : public Base { virtual void f(); virtual void g(); }; Base 和 Derived 各有一个虚表,分别是 VTable_B 和 VTa... 阅读全文
posted @ 2012-03-11 16:01 kanego 阅读(1861) 评论(0) 推荐(1) 编辑
摘要: 最近在看delta3d开源引擎,最底层封装的消息机制,是基于其has_slots,搜索了一下其资料发现是一个很好用的C++库,先对其简单介绍一下。首先说下插槽机制。插槽系统常用的有三种:boost的signals,sigslot,sigc++基本功能有:1.connect2.disconnect3.emitsigslot优点1.不用担心空回调,当回调对象析构时会自动disconnect2.支持多线程,线程安全,有锁3.缺点1.只能回调void类型函数,不支持返回值。boost中的signals库架构类似,支持返回值,但引入了boost中的其他库2.slot没有优先级,不能动态调整回调队列中.. 阅读全文
posted @ 2012-02-27 15:24 kanego 阅读(10670) 评论(0) 推荐(3) 编辑
摘要: [译] - 投影矩阵的推导原帖地址:http://www.codeguru.com/cpp/misc/misc/math/article.php/c10123__1/Deriving-Projection-Matrices.htm译文:矩阵变换作为3d图形程序员的基本知识,投影矩阵是其中很复杂的内容。平移和缩放是容易理解的,旋转矩阵只需要掌握了基本的三角几何知识,但是投影 矩阵不一样。如果你看过投影矩阵的形式,你会发现你很难很快知道它是怎么来的。而且,我在网上没有发现很多有关推导投影矩阵的资源。本文就是讲述如何推导 投影矩阵。对于新接触3d图形学的人来说,推导投影矩阵需要有一定的数学基础,但不 阅读全文
posted @ 2012-02-11 19:41 kanego 阅读(3656) 评论(0) 推荐(0) 编辑
摘要: 如何在编译器(vs2008)里设置调用别人写好的lib和dll步骤:1.Tools->options->projects and solutions->VC++ directories分别在包含文件,库文件填加了路径 (这些路径只告诉编译器怎么找文件,没有说把那里面的文件加入工程.) (若不设置,编译报错:无法打开***文件) 2.Project->properties->c/c++->general->additional include directories 添加包含文件 Project->properties->linker-> 阅读全文
posted @ 2012-02-10 10:44 kanego 阅读(22127) 评论(4) 推荐(4) 编辑
摘要: 使用OSG的人都知道OSG的内存管理方式采用了智能指针,通过智能指针的方式让OSG自己处理对象的销毁工作。在OSG中有两个智能指针类型,一个就是我们再熟悉不过的ref_ptr,另外一个可能很多人不一定经常用,但确实非常好的observer_ptr。这两种类型都是作为智能指针而出现的,那他们到底有什么区别?为什么会出现两个类似的东西?下面我们慢慢揭开它们的面纱。 其实它们是两种智能指针类型,一种是我们熟悉的强指针类型(strong pointer),一种是弱指针类型(weak pointer),ref_ptr就是强指针类型,observer_ptr是弱指针类型,强指针类型ref_ptr和一般意. 阅读全文
posted @ 2012-02-04 16:20 kanego 阅读(1434) 评论(0) 推荐(1) 编辑
摘要: View Code “CTest<T>::~CTest” : 不允许 dllimport 函数 的定义 “CTest<T>::CTest” : 不允许 dllimport 函数 的定义//代码如下template<class T>class __declspec(dllimport) CTest{public: CTest(); ~CTest();};template<class T>CTest<T>::CTest(){//}template<class T>CTest<T>::~CTest(){//} 当要使 阅读全文
posted @ 2012-02-02 21:25 kanego 阅读(17087) 评论(0) 推荐(0) 编辑
摘要: 游戏管理器组件给我们提供了在不修改游戏管理器的情况下灵活扩展我们的自定义行为的能力。游戏管理器组件是基于消息来工作的,定义自定义行为的基本 流程就是创建自定义类型的消息,在合适的时候发送消息,创建自定义游戏管理组件并重写自己的消息处理。将自定义组件添加到游戏管理器,游戏管理器会自动将 消息发送给游戏管理器组件(调用组件的消息处理函数)。下面我们首先来结合实例分析该过程的具体流程及其使用方法。添加自定义行为有两种方式,一种是不定义自己的消息类型和消息,直接用现有的消息类型和消息对象,只是扩展自己的游戏管理器组件,也就是直接对现有 消息扩展消息处理。总之这两种方式都少不了要定义自己的游戏管理器组件 阅读全文
posted @ 2012-01-06 11:18 kanego 阅读(392) 评论(0) 推荐(1) 编辑