2018年11月8日 星期四

[C++ Meta-programming] 實作 Pointer 判斷器


 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 得到對應的結果


沒有留言:

張貼留言