cpp typename关键字

泛型编程关键字,C#内也有这个概念。

非从属名称(non-dependent names): 
不依赖任何template参数的名称, 如int value;

从属名称(dependent names):
模板内出现的名称, 相当于某个模板参数

嵌套从属名称(nested dependent names):
从属名称在class内呈嵌套装, 如T::const_iterator ci;

#include <iostream>
#include <memory>
#include <list>

using namespace std;

template<typename T>
class A1 {
public:
    class A11 {
    public:
        A11(int i) {}
        void fun1() {};
    };
};

template<typename T>
class B1 : public A1<T>::A11 {//这里不需要加typename  [基类列表]
public:
    B1(int i0):A1<T>::A11(i0)//这里不需要加typename  [成员初值列表]
    {
    }
    int fun1(T Is) {
        typename A1<T>::A11 a0(1);//这里要加typename  [嵌套从属名称]
        a0.fun1();
        typename T::iterator i0(Is.begin());//这里要加typename  [嵌套从属名称]
        i0++;
        return *i0;
    }
};

int main()
{
    list<int> i0 = {1,2,3};
    B1<list<int>> b0(0);
    std::cout << b0.fun1(i0) << "\n";
    return 0;
}

VS内嵌套从属名称不加typename也可编译通过,但智能提示会不灵。加上后格式正常。

posted @ 2017-06-21 17:08  晨祷  阅读(308)  评论(0编辑  收藏  举报