标题:STL问题
只看楼主
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
 问题点数:0 回复次数:2 
STL问题

读STL中的不解问题读STL中的不解问题
template <class T>
class malloc_allocator
{
public:
typedef T value_type;
typedef value_type* pointer;
typedef const value_type* const_pointer;
typedef value_type& reference;
typedef const value_type& const_reference;
typedef std::size_t size_type;
typedef std::ptrdiff_t difference_type;
//问题1:这个红色区域的用的社什么用法,其好处是身么呢


template <class U>
struct rebind { typedef malloc_allocator<U> other; };

malloc_allocator() {}
malloc_allocator(const malloc_allocator&) {}
template <class U>
malloc_allocator(const malloc_allocator<U>&) {}
~malloc_allocator() {}

pointer address(reference x) const { return &x; }
const_pointer address(const_reference x) const {
return x;
}

pointer allocate(size_type n, const_pointer = 0) {
void* p = std::malloc(n * sizeof(T));
if (!p)
throw std::bad_alloc();
return static_cast<pointer>(p);
}

void deallocate(pointer p, size_type) { std::free(p); }

size_type max_size() const {
return static_cast<size_type>(-1) / sizeof(T);
}

void construct(pointer p, const value_type& x) {
new(p) value_type(x);
}
void destroy(pointer p) { p->~value_type(); }

private:
void operator=(const malloc_allocator&);
};

template<> //问题3:既然摸板参数为空,那么写不写template<>有什么不同 ?
class malloc_allocator<void> //问题4:malloc_allocator<void><void> 写与不写不同在那里?
{
typedef void value_type;
typedef void* pointer;
typedef const void* const_pointer;

template <class U>
struct rebind { typedef malloc_allocator<U> other; };
};
以上问题望各位朋友给指点指点!


搜索更多相关主题的帖子: STL 
2007-01-24 20:18
radcat
Rank: 3Rank: 3
等 级:论坛游民
威 望:8
帖 子:306
专家分:45
注 册:2006-9-12
得分:0 

STL我也不太熟不过希望和您共同研究.

上面红色的部分是定义就像例如Type int T,将T定义为int类型,然后可以用T a;定义一个int a,
下面的template<>的意思是它是一个模版类特例.


2007-01-26 08:50
corrupt
Rank: 2
等 级:新手上路
威 望:3
帖 子:535
专家分:0
注 册:2004-9-29
得分:0 
前面一个(差不多是 替换的意思) 是为了 stl所有容器的 统一, 代码看上去 更容易懂。

后面的是 模板类特化

2007-01-29 10:19



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-117944-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.411245 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved