Monthly Archive: October 2014

Use SublimeClang in SublimeText 3

SublimeClang is the greatest thing in ST3, at least in every C++ programmer’s mind: it is the only plugin in ST that supports C++ intelligent completion/jumping. However, the author of SublimeClang has moved to...

More

C++的反射机制小例

原来一直对“反射”这个概念不清楚,听别人提起过很多次,也有vczh这样的大牛号称在C++里实现了反射,我也不知道具体指的是什么。今天在SOLID里遇到一个具体问题,跟HJK讨论了一下,发现原来这就是反射机制。 简单的说,反射就是让对象获取关于自身的信息(如对象类型),而不需要在编写代码的时候提前知道这些信息。比如说,我们有一个对象a,其类型是A。一般来说,我要对a进行操作,需要先声明一个A& a_pointer,然后再来做事情。但是假设我们这时候不知道A这个类型,或者这个类型的头文件并未被引用,就无法对a进行操作了。如果我们可以获得a的类型信息,比如TYPEOF(a)& a_pointer, 那么我们就无需知道a的具体类型,或者引用A类型的头文件了。 C++并不直接支持反射特性,但是上述的场景在OO语言中会经常出现。考虑一个常见的场景。假设有如下的两个派生类,都由Base类派生而来 // a_class.h class A : public Base { public: A() {} virtual ~A() {} virtual void Produce(Base** x) {*x = new A;} }; // b_class.h class B :...

More