Loki之类型识别
来源:互联网 发布:服装店收银软件排行 编辑:程序博客网 时间:2024/05/16 12:34
这是Loki里的类型识别的测试,分别测试普通类型,指针类型和类成员指针类型。
下面是测试代码,测试环境是gcc 4.6.3
NullType.h
#ifndef _NULLTYPE_INC_#define _NULLTYPE_INC_class NullType;#endif
PointerTraits.h
#ifndef _POINTERTRAITS_INC#define _POINTERTRAITS_INC #include "NullType.h"template <typename T>class TypeTraits{private:template <class U> struct PointerTraits{enum {result = false};typedef NullType PointeeType;};template <class U> struct PointerTraits<U*>{enum {result = true};typedef U PointeeType;};template <class U> struct PToMTraits{enum {result = false};};template <class U, class V> struct PToMTraits<U V::*>{enum {result = true};};public:enum {isPointer = PointerTraits<T>::result};typedef typename PointerTraits<T>::PointeeType PointeeType;enum {isMemberPointer = PToMTraits<T>::result};};#endif
main.cpp
#include <iostream>#include <vector>using namespace std;#include "PointerTraits.h"class T{public:int a;};int main(int argc, char *argv[]){bool iterIsPtr = TypeTraits<vector<int>::iterator>::isPointer;cout<<"vector<int>::iterator is "<<(iterIsPtr ? "pointer": "type")<<"\n";iterIsPtr = TypeTraits<int*>::isPointer;cout<<"int* is "<<(iterIsPtr ? "pointer": "type")<<"\n";iterIsPtr = TypeTraits<int*>::isMemberPointer;cout<<"int* is member pointer ("<<(iterIsPtr ? "yes": "no")<<")\n";/* * int T::* 是一个指向类T的int的指针。 * 如:int T::* c = &T::a; *///int T::* c = &T::a;iterIsPtr = TypeTraits<int T::*>::isMemberPointer;cout<<"int* is member pointer ("<<(iterIsPtr ? "yes": "no")<<")\n";return 0;}
编译:g++ main.cpp
运行:./a.out
输出:
vector<int>::iterator is type
int* is pointer
int* is member pointer (no)
int T::* is member pointer (yes)
- Loki之类型识别
- 工厂模式之【Loki】
- Loki之Funtion
- Loki之ThreadPool
- loki
- Loki源码阅读之TypeList(未完)
- 初学汇编之CPU类型识别
- MFC关键技术之运行时类型识别
- C++之运行时识别类型
- c++之运行时类型识别
- Loki库:类型间耦合检测和去耦合
- 递归之美 - Loki库TypeList源码剖析
- 智能指针的标准之争:Boost vs. Loki
- 智能指针的标准之争:Boost vs. Loki
- 智能指针的标准之争:Boost vs. Loki(转载)
- 智能指针的标准之争:Boost vs. Loki
- 递归之美 - Loki库TypeList源码剖析
- 智能指针的标准之争:Boost vs. Loki
- 2012-8-24
- Ext.Net 1.x_Ext.Net.CheckboxSelectionModel类型Ext.grid.GridPanel的某行不能选择
- 数据库 TRUNCATE TABLE 语句
- c++引用
- inputAccessoryView的使用
- Loki之类型识别
- c++多线程(一)
- ios5 自定义导航条的问题
- web_add_auto_header("x-requested-with", "XMLHttpRequest "); 在LR中的作用
- CBW、CWDE、CDQ、CWD: 扩展指令
- android 获取 imei号码
- JMF getDeviceLIst 得到null解决方案
- linux log 日志编程
- 在asp.net程序里调整ado.net连接池