模板:名称解析:依赖模板参数: - >任何人都可以为此语句说明更多示例吗?

时间:2010-09-25 09:04:21

标签: c++ templates

这是ISO C ++标准14.6.2.4的声明: 依赖模板参数:

  
      
  1. 类型模板参数依赖于它指定的类型      依赖。

  2.   
  3. 如果常量,则整数非类型模板参数依赖       它指定的表达式取决于值。

  4.   
  5. 非整数非类型模板参数依赖于其类型        是依赖的还是它具有以下任何一种形式并包含一个        nested-name-specifier,指定命名a的类名        依赖类型。

  6.   
  7. 如果模板模板参数命名模板,则它依赖于模板        参数或是带有嵌套名称说明符的限定ID        包含一个命名依赖类型的类名。

  8.   

我无法理解这些观点?

任何人都可以举例说明这些陈述吗?

1 个答案:

答案 0 :(得分:1)

这就是我的理解。我已根据OP中的行号标记了代码内联中的各个代码段。

struct A{
    void f(){}
};

template<class T> struct B{};

// The template argument B<T> is TYPE depdent on the template parameter T                      (1)
template<class T, class U = B<T> > struct T1{};

// The template argument c is VALUE dependent on the template non type parameter 'c'        (2)
template<class T, char c, int d = c> struct T2{};

// The 2nd template argument is TYPE depdent on the template parameter T                    (3)
template<class T, void (T::*p)(void) = &T::f> struct T3{};

// The template template argument B is TYPE depdent on the template parameter T             (4)
template<class T, template<class U = T> class V = B> struct T4{};


int main(){
    T1<int> t1;
    T2<int, 'A', 2> t2;
    T3<A> t3;
    T4<A> t4; 
}