温馨提示×

linux c++怎么使用模板

小樊
35
2026-09-08 03:20:17
栏目: 编程语言

在 Linux 下使用 C++ 模板(Template)和在其他平台(Windows/macOS)本质上是一样的,因为模板是 C++ 语言标准的一部分。下面我从基础概念 → 示例代码 → 编译运行 → 常见用法几个方面给你讲清楚。


一、什么是模板(Template)

模板用于泛型编程,让函数或类可以支持多种数据类型。

两种主要形式:

  1. 函数模板(Function Template)
  2. 类模板(Class Template)

二、函数模板示例

示例:通用的 max 函数

#include <iostream>

template <typename T>
T myMax(T a, T b) {
    return (a > b) ? a : b;
}

int main() {
    std::cout << myMax(3, 5) << std::endl;
    std::cout << myMax(3.14, 2.71) << std::endl;
    std::cout << myMax('a', 'z') << std::endl;
    return 0;
}

编译运行(Linux)

g++ template_func.cpp -o template_func
./template_func

三、类模板示例

示例:通用的栈(简化版)

#include <iostream>

template <typename T>
class Stack {
private:
    T data[100];
    int top = 0;
public:
    void push(T v) {
        data[top++] = v;
    }
    T pop() {
        return data[--top];
    }
};

int main() {
    Stack<int> s;
    s.push(10);
    s.push(20);
    std::cout << s.pop() << std::endl;
}

编译

g++ template_class.cpp -o template_class
./template_class

四、模板的编译特点(重点)

在 Linux / C++ 中:

模板通常写在头文件中
❌ 不要把模板实现放到 .cpp 文件里(除非用 export,但 GCC 不支持)

✅ 推荐写法:

// stack.h
template <typename T>
class Stack {
public:
    void push(T v);
};

#include "stack_impl.h"  // 实现文件

或直接在头文件里写实现。


五、常见模板用法

1. 多个模板参数

template <typename T, typename U>
void print(T a, U b) {
    std::cout << a << " " << b << std::endl;
}

2. 模板特化

template <>
const char* myMax<const char*>(const char* a, const char* b) {
    return std::string(a) > std::string(b) ? a : b;
}

3. 非类型模板参数

template <typename T, int N>
class Array {
    T data[N];
};

六、Linux 下常用编译工具

g++ file.cpp -std=c++11 -o app
g++ file.cpp -std=c++17 -o app

查看 GCC 版本:

g++ --version

七、小结

✅ Linux 下 C++ 模板用法 = 标准 C++
✅ 模板多用于库(STL、Boost)
✅ 模板错误提示很长,要习惯看编译器输出

如果你愿意,我可以:

  • 给你写一个 完整的 Linux 模板项目结构
  • 模板在 STL 中的实际用法
  • 模板元编程(进阶)

你更想了解哪一块?

0