// filename: test.cpp
#include <stdio.h>
template <typename T>
int a()
{
int j = sizeof(T);
printf("T size %d\n", j);
return 0;
}
template <typename V>
int b(V v)
{
int j = sizeof(v);
printf("V size %d\n", j);
return 0;
}
int main(int argc, const char *argv[])
{
// 方法1:通过手写类型来指定模板类型
a<int>();
a<double>();
// 方法2:通过编译器自动推导类型来指定模板类型
int i;
double d;
b(i);
b(d);
return 0;
}
编译执行:
[xiaochu.yh@OB test]$ g++ test.cpp
[xiaochu.yh@OB test]$ ./a.out
T size 4
T size 8
V size 4
V size 8
上面是单独针对函数,你还会看到一个类里面的普通函数、static函数也这么用,一回事。
class SomeClass {
public:
template <typename C>
static void run() { printf("C size %d\n", sizeof(C)); }
template <typename X>
void fish() { printf("X size %d\n", sizeof(X)); }
};
int main(int argc, const char *argv[])
{
SomeClass::run<int>(); // 注意,类型是写在run后面
// SomeClass<int>::run(); // 编译失败,思考一下为什么
SomeClass s;
s.fish<int>();
return 0;
}