模板类的嵌套
2015-06-08 15:52
239 查看
#include<iostream> using namespace std; template<class T> class A{ public: struct B { B(T j): i(j) { } T i; }b; A(): b(1) { cout<<"A construct"<< endl; } B get() { // 如果在B后面加<T>, 会导致错误,因为B并非特定模板类,虽然有T在其定义内,但他的T是随A的,在A中T属于已知范畴 return b; } /*B<T> get() { return b; } */ }; template<class T> class C{ public: template<class S> struct D{ D(S j): i(j) { } S i; }; //不能在此直接加变量 D<T> d; C(): d(5) { } D<T> get() { return d; } /* D get() { return d; } */ }; int main() { A<int> a; //A<int>::B<int> b(2); //A::B<int> b(2); A<int>::B b(2); C<int>::D<string> d("test"); cout<< b.i<< endl; cout<< d.i<< endl; }
这个问题是我在做list类的iterator时的疑惑,总会有<T>的错误!
如果内部成员的是需要依赖于T的,那自己编的话不如就不要内嵌模板了,如果是想让他变成模板的话,要注意一点:
<span style="white-space:pre"> </span>声明时前面加个 typename;
这个是在查问题时,发现的额外奖励,关于这点参考:http://blog.csdn.net/WaitForFree/article/details/10128771
相关文章推荐
- mac上连接魅族手机调试,不显示device
- java设计模式(四)---原型模式
- C#基础知识
- 阅读笔记之《你的灯亮着吗》第一,二章
- android:padding和android:layout_margin的区别?
- 读书笔记--<精益和敏捷开发大型项目应用指南>
- PHP类别管理:类别增加、选择
- Android 高级Drawable资源---复合Drawable----层Drawable
- 树形结构的数据库表Schema设计
- [JVM]成为JavaGC专家(1)—深入浅出Java垃圾回收机制
- mysql添加用户和用户权限
- ES6:JavaScript 新特性
- LazyLoad使用注意
- SAT作文素材Eleanor Roosevelt
- Uber 面经
- DrawerLayout遇到的问题
- HTTP请求方法及响应码详解(http get post head)
- VIM插件 - Project项目管理工具
- 隐藏滚动条
- Windows下搭建MySQL Master Slave