成员函数模板,显示实例化、声明

本文介绍了C++中普通类和模板类的成员函数模板的概念与用法,包括如何在类模板中定义成员函数模板,并探讨了模板显示实例化的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、普通类的成员函数模板
不管是普通类还是模板类,它的成员函数可以是一个函数模板,称为“成员函数模板”,不可以是虚函数,否则编译器会报错。

#include <iostream>

using namespace std;

class A
{
public:
	template <typename T>
	void myft(T temp)//成员函数模板
	{
		cout << temp << endl;
	}
};


int main()
{
	A a;
	a.myft();
	return 0;
}
3

二、类模板的成员函数模板
类模板的模板参数必须用<>指定,成员函数模板(普通函数模板)的参数都可以由系统推断

#include <iostream>

using namespace std;

template<typename C>//类模板
class A
{
public:
	template<typename T2>
	A(T2 v1, T2 v2);//构造函数我们也引入自己的模板,和整个类的模板c没有关系

	template <typename T>
	void myft(T temp)//成员函数模板
	{
		cout << temp << endl;
	}

	void myftpt() {  }

	C m_ic;
};

template <typename C>//先跟类模板的参数列表
template <typename T2>//再跟构造函数自己的模板参数列表
A<C>::A(T2 v1, T2 v2)
{
	cout << v1 << v2 << endl;
}


int main()
{
	A<float>a(1, 2);
	A<float>a2(1.1, 2.2);//编译器执行到上一句会实例化,同一种实例不会实例两次,这里类似再次调用实例

	return 0;
}
12
1.12.2

类模板的成员函数(包括普通成员函数/成员函数模板)只有为程序所用的(代码中出现了)才会实例化,如果某函数未使用,则不会实例化该成员函数。

三、模板显示实例化,模板声明
为了防止在多个.cpp文件中都实例化相同的类模板,所以C++11提出了一个解决方法,我们成为“显示实例化”;通过”显示实例化“类对这种生成多个相同类模板实例的开销
test.cpp

//"显示实例化"手段中"实例化定义",这种实例化定义只需要在一个.cpp文件就可以。
template A<float>;//编译器遇到这段代码就直接实例化一个A<float>类
//在其它test.cpp中只需声明就行

test2.cpp

extern template A<float>;//其它声明都这么写
//extern目的就是告诉编译器在其它.cpp中已经有该模板的实例化类了

模板的实例化定义只有一个,声明可以由多个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值