c++类模板的声明与定义

本文介绍了C++中类模板的基本定义方法,并通过一个简单的示例进行说明。文章探讨了类模板在不同文件中的声明与实现可能导致的问题——编译分离,并提出了解决该问题的方向。

类模板的定义,一般的简单定义很多,我以为我理解,当我想尝试取去用的时候,发现并非如此。

简单定义如下:

template<class T>  // typename 可以代替 class
class Unity{
private:
    T a;
public:
    void show(T b){};  //声明与定义挡在一起
};

在测试程序中

int main(){
    Unity<int> u;
    ……
}

遇到的一个问题:模板不能和函数一样在头文件中声明,在另一个程序中实现,会导致“编译分离”,应该有方法可以解决这个问题,但是我暂时没有实现,需要时进一步研究。

那么就按照推荐的声明与定义尽量保持在一个文件中

### C++ 函数模板的声明定义 C++ 中的函数模板允许程序员编写能够处理不同数据类型的通用函数。它通过 `template` 关键字来实现,其中 `<typename T>` 或 `<class T>` 表示一个占位符类型参数[^1]。 #### 函数模板的声明 函数模板的声明通常位于头文件中或者源文件顶部,以便其他部分代码可以调用此模板。以下是函数模板的一般形式: ```cpp // 声明语法 template <typename T> 返回值类型 函数名(形参列表); ``` 例如,在比较两个数值大小的情况下,我们可以这样声明一个函数模板: ```cpp template <typename T> T maxNumber(T a, T b); ``` 这表明我们正在创建一个名为 `maxNumber` 的函数模板,它可以接受任意类型的两个参数并返回较大的那个[^1]。 #### 函数模板的定义 函数模板的具体逻辑实现在其定义部分完成。定义紧跟在声明之后(也可以分开写),如下所示: ```cpp // 定义语法 template <typename T> 返回值类型 函数名(形参列表) { // 实现细节... } ``` 继续上面的例子,下面是完整的定义: ```cpp template <typename T> T maxNumber(T a, T b) { return (a > b) ? a : b; } ``` 这里的关键在于编译器会根据实际传入的数据类型自动生成相应的函数版本[^1]。 当我们在程序中使用这个模板时,只需像调用普通函数一样传递所需参数即可。如果需要明确指定使用的类型,则可以通过尖括号手动指明,比如 `add<int>(...)`[^2]。 综上所述,C++ 函数模板提供了极大的灵活性和便利性,使得开发者无需重复书写针对不同类型的功能相似的代码片段。 ### 示例代码展示 下面给出一段综合运用了前面提到的知识点的小例子: ```cpp #include <iostream> using namespace std; // 函数模板声明 template <typename T> T sumNumbers(T a, T b); int main() { int i1 = 5, i2 = 7; double d1 = 3.4, d2 = 6.9; cout << "Sum of integers: " << sumNumbers(i1, i2) << endl; // 自动推导类型为 int cout << "Sum of doubles: " << sumNumbers(d1, d2) << endl; // 自动推导类型为 double // 显式指定类型 cout << "Explicitly specified as integer: " << sumNumbers<int>(d1, d2) << endl; return 0; } // 函数模板定义 template <typename T> T sumNumbers(T a, T b){ return a + b; } ``` 以上展示了如何正确地声明定义以及应用 C++ 函数模板。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值