在 Linux 下使用 C++ 模板(Template)和在其他平台(Windows/macOS)本质上是一样的,因为模板是 C++ 语言标准的一部分。下面我从基础概念 → 示例代码 → 编译运行 → 常见用法几个方面给你讲清楚。
模板用于泛型编程,让函数或类可以支持多种数据类型。
两种主要形式:
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;
}
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" // 实现文件
或直接在头文件里写实现。
template <typename T, typename U>
void print(T a, U b) {
std::cout << a << " " << b << std::endl;
}
template <>
const char* myMax<const char*>(const char* a, const char* b) {
return std::string(a) > std::string(b) ? a : b;
}
template <typename T, int N>
class Array {
T data[N];
};
g++ file.cpp -std=c++11 -o app
g++ file.cpp -std=c++17 -o app
查看 GCC 版本:
g++ --version
✅ Linux 下 C++ 模板用法 = 标准 C++
✅ 模板多用于库(STL、Boost)
✅ 模板错误提示很长,要习惯看编译器输出
如果你愿意,我可以:
你更想了解哪一块?