template <class T>
void fun(){}
fun(1);
fun(2.3);
编译器就只会给你生成个void fun<int>()和void fun<double>(), 这种检查是在编译时期进行的.
比如用这一特性来搞个compile time check, 也叫static check, 比如morden C++ design上的:
template <bool>
struct static_assert;
template <>
struct static_assert<true>{};
就可以实现编译期间的assert;
static_assert<1 > 2>();
static_assert<2 < 3>();
摸板现在不支持实现和原型分开, 所以你只能把他们放在同一个文件中, 比如:
template <class T>
void fun();
template <class T>
void fun(){...}
或者直接
template <class T>
void fun(){...}
我直接给你做个示范算了, 比如写个求平方的模板:
// fun.cpp
template <class T>
T square(T x)
{
return x * x;
}
// main.cpp
#include <iostream>
template <class T>
T square(T);
int main()
{
std::cout << square(2);
}
或者
// fun.h
template <class T>
T square(T x){return x*x;}
// main.cpp
#include <iostream>
#include "fun.h"
int main()
{
std::cout << square(2);
}
温馨提示:答案为网友推荐,仅供参考