在C++中可以通过模板编程来实现代码复用, 减少因为类型不同相似的代码. 模板代码一般放在头文件中, 因为编译器需要在编译时能通过模板代码, 生成最终的C++代码. 下面看一个模板实例代码:
#include <iostream>
// 函数模板
template <typename T> void show(T t1, T t2) {
std::cout << "函数模板" << std::endl;
}
// 函数模板全特化
template <> void show(const char *t1, const char *t2) {
std::cout << "函数模板全特化" << std::endl;
}
// C++不支持函数模板偏特化,可以重载解决
// template<typename T> bool show<T, double>(T a, double b);
// 函数重载
template <typename T> void show(T a, double b) {
std::cout << "函数重载" << std::endl;
}
// 类模板
template <typename T, typename U> class Any {
public:
Any(T t, U u) { std::cout << "类模板" << std::endl; }
};
// 类模板全特化
template <> class Any<const char *, const char *> {
public:
Any(const char *t, const char *u) {
std::cout << "类模板全特化" << std::endl;
}
};
// 类模板偏特化
template <typename T, typename U> class Any<T *, const U *> {
public:
Any(T *t, const U *u) { std::cout << "类模板偏特化" << std::endl; }
private:
T m_t;
U m_u;
};
int main(void) {
show(1, 2); // 函数模板
show(1, 2.1); // 函数重载
// show(1.1, 2.1); // 出错
show("hello", "world"); // 函数模板全特化
Any<int, double> a(1, 2.0f); // 类模板
Any<const char *, const char *> b("hello", " world"); // 类模板全特化
Any<char *, const char *> c(const_cast<char *>("hello"), " world"); //类模板偏特化
}
如果觉得有帮助,可以扫描右边的微信打赏码支持一下.