1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <iostream> /* Primary template */ template <typename T> struct IsPointer { static const bool value = false; }; /* Partial Specialization */ template <typename T> struct IsPointer<T*> { static const bool value = true; }; int main() { std::cout << "IsPointer<int *>::value = " << IsPointer<int *>::value << std::endl; std::cout << "IsPointer<int>::value = " << IsPointer<int>::value << std::endl; } |
思考脈絡
- Primary template 先設計好
- static member 值 false
- 一般情況,帶入的 template argument 會走這
- Partial Specialization
- static member 值帶 true
- 若傳入的 template argument 是 pointer 的類型,compiler 會用 instatiate 這個template,得到 static member value 是 true 的 struct
- 使用 IsPointer<型別>::value 得到對應的結果
沒有留言:
張貼留言