C++基础---函数模板

C++基础—函数模板

将类型泛化成⼀个名称,⽐如:T
告诉编译器这是函数模板
同时告诉它 T 是模板参数

template<typename T>//定义模板
T max(T a,T b){
	return a > b ? a : b;
}

template<class T>//定义模板,也支持class
T max(T a,T b){
	return a > b ? a : b;
}

函数模板

  • 编译器会根据模板⽣成合适的函数
#include 
template<typename T>//定义模板
T max(T a,T b){
	return a > b ? a : b;
}
int main(){
	int a {10},b{20};
	std::cout<<max<int>(a,b)<<std::endl;//调用模板函数
	return 0;

}

编译器可以根据c和d的类型猜出T的类型

#include 
template<typename T>//定义模板
T max(T a,T b){
	return a > b ? a : b;
}
int main(){
	double c {10.2},d{20.3};
	std::cout<<max<double>(c,d)<<std::endl;//调用模板
	std::cout<<max(c,d)<<std::endl;//无需模板参数
	return 0;
}

这个类型必须⽀持 > 操作符

#include 
template<typename T>//定义模板
T max(T a,T b){
	return a > b ? a : b;
}
int main(){
	double a {"A"},b{"B"};
	std::cout<<max(a,b)<<std::endl;//无需模板参数
	return 0;
}

可以有多个模板参数,他们的类型可以不⼀样

#include 
template<typename T1,typename T2>//定义模板,可以有多个类型参数
void func(T1 a,T2 b){
	std::cout<<a<<""<<b<<std::endl;
}
int main(){
	func<int,double>(1,2.2);//显式指向类型参数
	func("A",3.3);//隐式推断类型参数
	return 0;
}

类模板

类模板(Class Templates)通常指的是在C++中使用的模板机制创建的类模板。类模板允许你定义通用类,其中某些属性或行为可以根据具体类型进行参数化。

template<typename T>//定义模板
class Item 
{
private:
	std::string name;
	int value;
public:
	Item(std::string name ,int value)
	:name {name},value {value} 
	{}
	std::string get_name() const {return name;}
	int gen_value() const{return value}
}
#include 

// 类模板定义
template <typename T>
class Pair {
private:
    T first;
    T second;

public:
    // 构造函数
    Pair(T f, T s) : first(f), second(s) {}

    // 函数模板
    void display() {
        std::cout << "Pair: " << first << " and " << second << std::endl;
    }
};

int main() {
    // 使用类模板创建不同类型的实例
    Pair<int> intPair(5, 10);
    Pair<double> doublePair(3.14, 6.28);
    Pair<std::string> stringPair("Hello", "World");

    // 调用函数模板
    intPair.display();
    doublePair.display();
    stringPair.display();

    return 0;
}

你可能感兴趣的:(#,C++基础,c++,开发语言)