前两天某C++群正好在讨论C++中int类型的长度
对于支持C99标准的编译器来说,可以#include <cstdint>
来使用 int32_t, 但是目前不少的编译器都做不到这点
所以,自己写了个IntType.hpp
1 #ifndef INTTYPE_HPP_
2 #define INTTYPE_HPP_
3
4 #include "Platform.hpp"
5
6 namespace Charlie
7 {
8
9 typedef long long int64_t;
10 typedef int int32_t;
11 typedef short int16_t;
12 typedef char int8_t;
13
14 typedef unsigned long long uint64_t;
15 typedef unsigned int uint32_t;
16 typedef unsigned short uint16_t;
17 typedef unsigned char uint8_t;
18
19 }
20
21 #endif // INTTYPE_HPP_
22
然后今天大部分时间都消耗在了Timer的跨平台处理上
这里采用了Bridge Design Pattern
即pImpl方法,实现了Linux 和 Windows 两个平台相关的高精度计时器
接口设计得很简单,只能得到计时器定义以来经过的时间(单位是毫秒 //虽然精度都高于毫秒)
具体请见一下几个文件了
http://code.google.com/p/charlib/source/browse/trunk/Charlib/includes/Timer.hpp
http://code.google.com/p/charlib/source/browse/trunk/Charlib/includes/TimerImpl.hpp
http://code.google.com/p/charlib/source/browse/trunk/Charlib/includes/LinuxTimerImpl.hpp
http://code.google.com/p/charlib/source/browse/trunk/Charlib/includes/Win32TimerImpl.hpp
以及对应的srcs下的.cpp文件
基本上是这样
Timer {
protected:
TimerImpl* pImpl;
}
class LinuxTimerImpl : public TimerImpl {}
class Win32TimerImpl : public TimerImpl {}
还定义了一个用于多平台多编译器的平台辨识头文件 -
Platform.hpp目前SVN上也有VC 05的工程 和 Code::Blocks 的工程文件
代码在Windows下 MINGW 和 MSVC 8 两个编译器上编译通过
在Ubuntu下使用Code::Blocks + GCC 编译器上通过
// fibonacci数列的模板元编程版本因为在Ubuntu下GCC编译未通过,所以注释掉了,但是在MSVC 8和Code::Blocks的MINGW下编译通过
SVN地址:
http://charlib.googlecode.com/svn/trunk/其他杂项:
HugeInt added 预计在有空的时候会完成,用于高精度整形的运算 = =~!
posted on 2009-03-01 21:15
Charlie 侯杰 阅读(1980)
评论(4) 编辑 收藏 引用