|
@@ -992,7 +992,7 @@ void PrintID()
|
|
|
|
|
|
在上一节结束之后,你一定做了许多的练习。我们再来做三个练习。第一,给`float`一个ID;第二,给`void*`一个ID;第三,给任意类型的指针一个ID。先来做第一个:
|
|
|
|
|
|
-```
|
|
|
+``` C++
|
|
|
// ...
|
|
|
// TypeToID 的模板“原型”
|
|
|
// ...
|
|
@@ -1005,7 +1005,7 @@ template <typename T> class TypeToID<float>
|
|
|
|
|
|
嗯, 这个你已经了然于心了。那么`void*`呢?你想了想,这已经是一个复合类型了。不错你还是战战兢兢的写了下来:
|
|
|
|
|
|
-```
|
|
|
+``` C++
|
|
|
template <> class TypeToID<void*>
|
|
|
{
|
|
|
static int const ID = 0x401d;
|
|
@@ -1019,7 +1019,7 @@ void PrintID()
|
|
|
|
|
|
遍译运行一下,对了。模板不过如此嘛。然后你觉得自己已经完全掌握了,并试图将所有C++类型都放到模板里面,开始了自我折磨的过程:
|
|
|
|
|
|
-```
|
|
|
+``` C++
|
|
|
class ClassB {};
|
|
|
|
|
|
template <> class TypeToID<void ()>; // 函数的TypeID
|
|
@@ -1031,7 +1031,7 @@ template <> class TypeToID<
|
|
|
|
|
|
甚至连 `const` 和 `volatile` 都能装进去
|
|
|
|
|
|
-```
|
|
|
+``` C++
|
|
|
template <> class TypeToID<int const * volatile * const volatile>;
|
|
|
```
|
|
|
|