| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 760 人关注过本帖
标题:读STL中的不解问题
只看楼主 加入收藏
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
收藏
 问题点数:0 回复次数:7 
读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> //问题2:这里将其换成template <class T>行么?
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; };
};
以上问题望各位朋友给指点指点!

[此贴子已经被作者于2007-1-24 12:29:51编辑过]

搜索更多相关主题的帖子: STL中 typedef value pointer 
2007-01-24 12:20
tyc611
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-1-21
收藏
得分:0 
1. typedef给类型定义别名,其好处是新的类型好记,另外,当改变原类型时,只需要改写这儿的typedef即可,使用这个类的程序不受影响
2. 不行,不得与类的模板参数T重名
3,4没见过这种用法

2007-01-24 12:36
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
收藏
得分:0 
以下是引用tyc611在2007-1-24 12:36:00的发言:
1. typedef给类型定义别名,其好处是新的类型好记,另外,当改变原类型时,只需要改写这儿的typedef即可,使用这个类的程序不受影响
2. 不行,不得与类的模板参数T重名
3,4没见过这种用法

2. 不行,不得与类的模板参数T重名
那么就是说虽然不能使用T(那里使用的是U)
在使用这个成员函数时我可以将T实例为int 同时可以将U实例为int 对么?

2007-01-24 13:40
tyc611
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-1-21
收藏
得分:0 
以下是引用lixang在2007-1-24 13:40:00的发言:

2. 不行,不得与类的模板参数T重名
那么就是说虽然不能使用T(那里使用的是U)
在使用这个成员函数时我可以将T实例为int 同时可以将U实例为int 对么?

可以


2007-01-24 15:33
lixang
Rank: 1
等 级:新手上路
帖 子:231
专家分:0
注 册:2006-7-15
收藏
得分:0 
以下是引用tyc611在2007-1-24 12:36:00的发言:
1. typedef给类型定义别名,其好处是新的类型好记,另外,当改变原类型时,只需要改写这儿的typedef即可,使用这个类的程序不受影响
2. 不行,不得与类的模板参数T重名
3,4没见过这种用法

1. typedef给类型定义别名,其好处是新的类型好记,另外,当改变原类型时,只需要改写这儿的typedef即可,使用这个类的程序不受影响

那么这里typedef给类型定义别名,使用的作用区域为何?

2007-01-24 20:14
tyc611
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-1-21
收藏
得分:0 
以下是引用lixang在2007-1-24 20:14:00的发言:

1. typedef给类型定义别名,其好处是新的类型好记,另外,当改变原类型时,只需要改写这儿的typedef即可,使用这个类的程序不受影响

那么这里typedef给类型定义别名,使用的作用区域为何?

In range of the class.


2007-01-25 00:58
dlcdavid
Rank: 3Rank: 3
来 自:成都
等 级:新手上路
威 望:6
帖 子:193
专家分:0
注 册:2005-12-23
收藏
得分:0 
以下是引用lixang在2007-1-24 20:14:00的发言:

1. typedef给类型定义别名,其好处是新的类型好记,另外,当改变原类型时,只需要改写这儿的typedef即可,使用这个类的程序不受影响

那么这里typedef给类型定义别名,使用的作用区域为何?

作用域在本类,派生类和友元


为了C++,我放弃了课本
为了高考,我又放弃了C++
现在而今眼目下,我能做什么?www.
2007-01-27 10:49
dlcdavid
Rank: 3Rank: 3
来 自:成都
等 级:新手上路
威 望:6
帖 子:193
专家分:0
注 册:2005-12-23
收藏
得分:0 
template<> //问题3:既然摸板参数为空,那么写不写template<>有什么不同 ?
class malloc_allocator<void> //问题4:malloc_allocator<void> 的<void> 写与不写不同在那里?
------------------------------------------------------------------------------------------
这是摸板特化:
template<> //空摸板提示符,格式
class malloc_allocator<void> //尖括号里的是需要特化的摸板形参,即template <class T>中的T的实例
{} //如果T为void构建此特化版本

为了C++,我放弃了课本
为了高考,我又放弃了C++
现在而今眼目下,我能做什么?www.
2007-01-27 11:07
快速回复:读STL中的不解问题
数据加载中...
 
   



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

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