1. 嵌套依赖
#include <iostream>
using namespace std;
class A{
public:
class B{
public:
void foo(){
cout << "zhe e xin" << endl;
}
};
};
// 函数模板
template<class T> void Func(){
// A::B b; // 嵌套依赖, 编译报错,在第一次编译的时候,会把B当做A的成员,那后面再跟个b就有语法错误了
// 解决方法通过typename告诉编译器 B是A的嵌套类型
typename A::B b;
b.foo();
}
int main(void){
Func<int>();
return 0;
}
2. 依赖模板参数访问成员函数模板
- 第一次编译时,发现用未知类型定义的对象访问成员函数模板,属于未知类型调用,而对于未知类型调用编译器是不允许<>存在的。
- 而访问成员函数模板必须要加<>, 解决办法就是加template
#include <iostream>
using namespace std;
class A{
public:
// 成员函数模板
template<class T> void foo(){
cout <<