泛型编程关键字,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) << " "; return 0; }
VS内嵌套从属名称不加typename也可编译通过,但智能提示会不灵。加上后格式正常。