読者です 読者をやめる 読者になる 読者になる

プログラミングの魔物

エラー、バグ、仕様変更と戦うブログ

C++テンプレートテクニック 特殊化、部分特殊化

最近読んだ本だがあまり頭に入っていないようなので、読みなおして復習する。

特殊化

template<typename T>
bool equal(T x, T y){
  return x==y;
}
//const char*特殊化
template<>
bool equal(const char*x, const char*y){
  return std::strcmp(x,y) == 0;
}

部分特殊化

template<typename T>
class printer{
public:
  void out(T value){
    std::cout << value << std::endl;
  }
}
//ポインタに対する部分特殊化
template<typename T>
class printer<T*>{
public:
  void out(T* value){
    std::cout << *value << std::endl;
  }
}
//関数テンプレートでは部分特殊化ができないのでオーバーロードで代用
template <typename T>
void print(T value){ std::cout << value << std::endl;}

template <typename T>
void print(T* value){ std::cout << *value << std::endl;}

特にこれから先はテンプレートを使う機会が増えそうなので、しっかりと覚えておこう。

参考:

C++テンプレートテクニック

C++テンプレートテクニック