类的成员模板的类内和类外定义方法
来源:互联网 发布:秦思瀚 知乎 编辑:程序博客网 时间:2024/06/07 07:06
我的文章所写内容,都是自己实际编程中遇到的,通常是在遇到这个问题时,在网上搜索或者自己找到解决办法。
有时候,某些问题要花好久才找的到解决方案,因为网上资料较少,也有可能是我搜索能力不强。
写下这些,一是希望能帮助到遇到同样问题的朋友,二是记下之后,再次遇到这些问题,能记得解决办法。
由于平时工作都很忙,所以我的文章大多都只简单的写了方法,没讲解得太详细。
还是希望能够帮助到有需要的朋友们。
关于类的成员模板不了解的朋友们可以参考C++ primer ed3 16.7。
成员模板包括模板函数和模板类,且成员模板可以在类模板和非类模板(普通类)中。
这里将分别讲解类模板和非类模板中两种成员模板的定义方法:类内定义和类外定义。
最简单的定义方法即在类定义里面定义。
方法如下:
1)类模板中成员模板的类体内定义方法:
template<typename T1>
class QQQ
{
public:
template<typename T>//成员模板函数定义
static T f()
{
T t = T();
return t;
}
template<typename T2>//成员模板类定义
class AAA
{
};
};
2)非类模板中成员模板类内定义:
class EEE
{
public:
template<typename T>//成员模板函数定义
static T f()
{
T t = T();
return t;
}
template<typename T2>//成员模板类定义
class AAA
{
};
};
第二种方法是在类外定义:
1)类模板中成员模板的类外定义方法:
template<typename T1>
class QQQ
{
public:
template<typename T>//成员模板函数声明
static T f();
template<typename T2>//成员模板类声明
class AAA;
};
//成员模板函数的类外定义。
template<typename T1>
template<typename T>
T QQQ<T1>::f()
{
T t = T();
return t;
}
//成员模板类的类外定义。
template<typename T1>
template<typename T2>
class QQQ<T1>::AAA
{
};
2)非类模板中成员模板的类外定义方法:
class EEE
{
public:
template<typename T>//成员模板函数声明
static T f();
template<typename T2>//成员模板类声明
class AAA;
};
//成员模板函数类外定义
template<typename T>
T EEE::f()
{
T t = T();
return t;
}
//成员模板类的类外定义
template<typename T2>
class EEE::AAA
{
};
最后,给出类的成员模板的使用方法。
int main()
{
QQQ<int>::AAA<int> qa;//类模板的成员模板类的使用
QQQ<int> q;
cout<<q.f<int>(); //类模板的成员模板函数使用方法,这里显示给出了f的模板实参,因为f没有形参,不能通过隐式推导出模板参数。
EEE::AAA<int> ea; //非类模板的成员模板类使用方法
EEE e;
cout<<e.f<int>(); //非类模板的成员模板函数使用方法
}
本文仅简单讲解了类模板和非类模板中的成员模板函数和成员模板类的类内和类外定义方法,希望对有需要的朋友有所帮助。
- 类的成员模板的类内和类外定义方法
- 类的成员模板的类内和类外定义方法
- 模板类成员函数的定义和声明
- c# 类成员的定义 定义方法、字段和属性
- c# 类成员的定义 定义方法、字段和属性
- 函数模板和类模板成员函数的定义通常放在头文件中
- 一个猥琐的方法:解决模板类静态成员重定义的问题
- 类内定义的成员函数是内联函数
- 类模板中的函数模板的定义和调用(不是模板类中的普通成员函数)
- 类的静态数据成员在 类内只能声明,定义和初始化必须在类外
- 类的静态数据成员在 类内只能声明,定义和初始化必须在类外
- 成员的类模板
- 模板类成员函数的定义和声明为什么要放在一个文件中
- 模板类成员函数的定义和声明为什么要放在一个文件中
- 模板类成员函数的定义和声明为什么要放在一个文件中
- 4.1 类和成员函数的定义
- 模板类和模板函数的声明和定义分开文件写的方法
- JS类定义:涵盖了javascript公有成员定义、私有成员定义、特权方法定义的简单示例
- 模板完全特化和部分特化
- 字符串常量的内部表示
- 永不言弃
- JTree操作API归纳
- 笔记本无法识别硬盘
- 类的成员模板的类内和类外定义方法
- 版本控制软件太麻烦,但我真的需要一套代码管理软件
- [分类整理I]微软等100题系列V0.1版:c/c++基础面试题集锦
- thinkvd video converter with effect( trial version)
- 类的数组成员变量的初始化
- 关于中的一些函数
- 面向对象的几个概念性问题
- Erlang编程语言
- 机器学习入门的好书