利用 typename 消除歧义

    技术2022-05-11  55

    template<class T>class Ptr{public: typedef T Emp;

     void insert(Emp a){     value += a; }

     void show() {  std::cout<<"the result is "<<value<<"/n"; } Ptr():value( T()){}private: Emp value;};

    template<class T>void fill(T &c,  T::Emp a[],int len) {

     for ( int i = 0; i < len; ++i)     c.insert(a[i]);} 

    在fill 模板上下文中,编译器没有足够的信息来决定嵌套的名字 Emp到底是一类型名字,还是一个非类型的名字。

    C++ 标准约定,在这种情形下,嵌套的名字被假定为一个非类型的名字。

     

    以下加上typename 显示说明T 为一个类类型

    template<class T>void fill(T &c, typename T::Emp a[],int len) {

     for ( int i = 0; i < len; ++i)     c.insert(a[i]);} 


    最新回复(0)