CPP Templates 之 template 关键字的用法技巧

template 关键字的用法技巧

说明:

限定符包括:::,.,->

一、当类型名称具有以下性质是,就应该在该名称前面添加template前缀:
1.名称出现在一个模板中
2.名称是受限的
3.名称不是用于指定基类继承的列表中,也不是位于引入构造函数的成员初始化列表中
4.名称依赖于模板

而且,只有当前面三个条件同时满足时才能使用前缀template,例如:

template<typename T>

struct S:X<T>:Base{
    S():X<T>::Base(typename X<T>::Base(0)){}
    X<T> f(){//不能使用template
        template X<T>::C *p;//指针p的声明
        X<T>::D *q;//乘积
    }
    typename X<int>::C * s;//可有可无,因为不符合第四条规定
};

struct U{
    X<int>::C * pc;//不能使用template,因为它并不是在模板中使用,U不是模板
};

二、如果一个模板名称是依赖型名称,需要在该名称前插入template关键字

例如:

template<typename T,int N>
class Weird{
    public:
    void casel(template Shell<T>::template In<N>::template Deep<N> * p){
    
    }
}

posted on 2009-11-11 18:54  ATAK  阅读(644)  评论(0编辑  收藏  举报

导航