STL空间配置器的适配器

前面讲了simple_alloc alloc_pool将会作为bbgSTL容器的空间配置器,但是这两个类都不是泛型的,不能为所有类型自动提供内存分配,这时候就需要一个空间配置器的适配器来完成这功能。

我们将会通过下面一组预编译的宏,来决定到底是适配到simple_alloc 还是alloc_poo。具体做法如下:

#define SIMPLE_ALLOC

 

#ifdef SIMPLE_ALLOC

    typedef simple_alloc alloc;

#elif defined(ALLOC_POOL)

    typedef alloc_pool alloc;

#endif

源代码:

#ifndef _BBG_ALLOC_ADAPTER_H_ #define _BBG_ALLOC_ADAPTER_H_ #include "../bbg_common/bbg_common.h" #include "../bbg_alloc/bbg_allocpool.h" #include "../bbg_alloc/bbg_simple_alloc.h" BEGIN_BBG template <class Type , class Alloc> class alloc_adapter { public: static Type* allocate() { return (Type*)Alloc::allocate(sizeof(Type)); } static Type* allocate(size_t n) { return (0 == n)? 0 : (Type*)Alloc::allocate(n * sizeof(Type)); } static void deallocate(Type* p) { return Alloc::deallocate(p , sizeof(Type)); } static void deallocate(Type* p , size_t n) { return Alloc::deallocate(p , n * sizeof(Type)); } }; #define SIMPLE_ALLOC #ifdef SIMPLE_ALLOC typedef simple_alloc alloc; #elif defined(ALLOC_POOL) typedef alloc_pool alloc; #endif END_BBG #endif//_BBG_ALLOC_ADAPTER_H_

你可能感兴趣的:(Class)