在编写代码的时候,发现一个现象:
- 模板类从一个父模板类继承后,不能访问其内部的protected成员变量,提示:not declare;
- 普通类从一个父模板类继承后,可以访问其内部的protected成员变量,可正常编译和使用;
对于第1个现象,如果想正常使用需要加上父模板类的域名;
下面上代码
- 模板类继承模板类

1 #include <iostream> 2 namespace test 3 { 4 template <typename T> 5 class Base 6 { 7 public: 8 void Show() 9 { 10 std::cout << "hello world1! Base. a = " << a << std::endl; 11 } 12 13 protected: 14 int a = 0; 15 }; 16 17 template <typename T> 18 class Child : public Base<T> 19 { 20 public: 21 void Show() 22 { 23 std::cout << "hello world1! Child. a = " << a << std::endl; 24 } 25 }; 26 } // namespace test 27 28 int main() 29 { 30 test::Child<int> ch; 31 ch.Show(); 32 std::cout << "main. "; 33 return 0; 34 }
运行结果:
对成员变量a增加基类域名后编译通过:
- 普通类继承模板类

1 #include <iostream> 2 namespace test 3 { 4 template <typename T> 5 class Base 6 { 7 public: 8 void Show() 9 { 10 std::cout << "hello world1! Base. a = " << a << std::endl; 11 } 12 13 protected: 14 int a = 0; 15 }; 16 17 class A : public Base<int> 18 { 19 public: 20 void Show() 21 { 22 std::cout << "hello world1! A. a = " << a << std::endl; 23 } 24 }; 25 } // namespace test 26 27 int main() 28 { 29 test::A ch; 30 ch.Show(); 31 std::cout << "main. "; 32 return 0; 33 }
运行结果: