CPP的函数模板

1.函数模板书写格式:

template<typename T>//其后写上相应的模板函数
void example(T a,T b)
{
        cout<<"这是一个模板函数的示例"<<endl;
}

2.函数模板与普通函数的调用规则

<1>如果普通函数和模板函数都可以调用,则优先调用普通函数

void myFunc(int a, int b)
{
	cout << "这是一个普通函数" << endl;
}

template<typename T>
void myFunc(T a,T b)
{
	cout << "这是一个模板函数" << endl;
}
void test01()
{
	int a = 10;
	int b = 20;
	myFunc(a, b);
}
int main()
{
    test01();
    return 0;
}

<2>可以通过空模板参数列表来强制调用函数模板

void myFunc(int a, int b)
{
	cout << "这是一个普通函数" << endl;
}

template<typename T>
void myFunc(T a,T b)
{
	cout << "这是一个模板函数" << endl;
}

void test01()
{
	int a = 10;
	int b = 20;
	myFunc<>(a, b);//空模板参数列表<>
}
int main()
{
    test01();
    return 0;
}

<3>函数模板也可以发生重载

template<typename T>
void myFunc(T a,T b)
{
	cout << "这是一个模板函数" << endl;
}

template<class T>
void myFunc(T a, T b,T c)
{
	cout << "这是一个重载的模板函数" << endl;
}

<4>如果函数模板可以产生更好的匹配调用,则优先调用函数模板

void myFunc(int a, int b)
{
	cout << "这是一个普通函数" << endl;
}

template<typename T>
void myFunc(T a,T b)
{
	cout << "这是一个模板函数" << endl;
}

void test01()
{
	char a = 'a';
	char b = 'b';
	myFunc(a, b);
}

总结:既然提供了函数模板,就不要再书写同名的普通函数,容易产生二义性。

3.模板的局限性

template<typename T>
bool myCompare(T& a, T& b)
{
	if (a == b)
	{
		return true;
	}
	else
	{
		return false;
	}
}
void test01()
{
	int a = 10;
	int b = 10;
	bool ret = myCompare(a, b);
	if (ret)
	{
		cout << "a = b" << endl;
	}
	else
	{
		cout << "a != b" << endl;
	}
}
//如果传入参数是“类”类型的数据,则无法进行比较,此时需要对函数模板进行具体化,如下所示

class Person
{
public:
	Person(string name,int age)
	{
		this->name = name;
		this->age = age;
	}
	string name;
	int age;
};
template<typename T>
bool myCompare(T& a, T& b)
{
	if (a == b)
	{
		return true;
	}
	else
	{
		return false;
	}
}

template<>bool myCompare(Person& a, Person& b)//函数模板具体化
{
	if (a.age == b.age && a.name == b.name)
	{
		return true;
	}
	else
	{
		return false;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值