您的位置:首页 > 编程语言 > C语言/C++

[C++再学习系列] 模板函数的自定义点

2009-07-30 21:17 246 查看
模板函数

:

在编写模板时

,

可以通过一些显示的自定义

,

对模板参数类型做一些必要的限制

:

选择

1:

模板直接依赖于类型具有给定名字的合适的成员函数

,

则显式要求参数

T

提供该成员函数

.

选择

2:

模板依赖于



类型具有给定名字的合适的非成员函数

”,

则显式的要求

T

具有给定名字

/

签名和语义的非成员函数

.

选择

3:

模板依赖于



类型已经特化

(

如果必要

)

另一个模板

”,

则需要被特化的模板提供一个

(

通常是静态类成员

)

具有给定名字

/

签名和语义的函数

.

Template<typename T>

Void Sample1(T t){

t.foo(); //

选择

1, foo()



T

的成员函数

.

foo(t); //

选择

2, foo()

是和类型

T

一起提供的非成员函数

(

属于同一个名字空间

)

S3Traits<T>::foo(t); //

选择

3, foo()

是静态类成员

}

避免无意的自定义点

:

选择

1

将模板中的任何辅助函数都放在其自己内嵌的名字空间中

(

名字空间包括名字空间

+

类名

(

静态函数

))

选择

2

在引用基类的任何成员函数时

,

显式的使用基类名或者

this->

进行限定

.

Template<typename T>

class X<T>{

public:

void f()

{

X<T>::baz(); //

通过类名进行限定

T::baz(); //

通过类名进行限定

This->baz(); //this

指针

Hepler::baz(); //

这里

hepler

可以是名字空间

,

也可以是类名

}

}

为模板函数提供显式的自定义点,或避免无意的自定义点,其本质都是

C++

名字查找规则,就是利用

C++

的名字查找规则促进有意的名字查找,并避免无意的名字查找。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: