泛型编程关键字,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();//这里要加typename [嵌套从属名称]
a0.fun1();
typename T::iterator i0(Is.begin());//这里要加typename [嵌套从属名称]
i0++;
return *i0;
}
}; int main()
{
list<int> i0 = {,,};
B1<list<int>> b0();
std::cout << b0.fun1(i0) << "\n";
return ;
}

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

05-02 04:16