「C++の基礎 - テンプレート」の版間の差分

文字列「<source lang」を「<syntaxhighlight lang」に置換
(Wiki がページ「テンプレートの使い方」を「C++の基礎 - テンプレート」に、リダイレクトを残さずに移動しました)
(文字列「<source lang」を「<syntaxhighlight lang」に置換)
13行目: 13行目:
以下のソースコードは、様々な型の加算ができる関数である。<br>
以下のソースコードは、様々な型の加算ができる関数である。<br>
この関数の場合、+演算子を使用できない型はコンパイル時にエラーが出力される。<br>
この関数の場合、+演算子を使用できない型はコンパイル時にエラーが出力される。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  template<typename T>
  template<typename T>
  T Add(T a, T b)
  T Add(T a, T b)
34行目: 34行目:
== テンプレートの特殊化 ==
== テンプレートの特殊化 ==
テンプレートには、特定の型だけ異なる処理を行うテンプレートの特殊化の機能がある。<br>
テンプレートには、特定の型だけ異なる処理を行うテンプレートの特殊化の機能がある。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  template <typename T>
  template <typename T>
  T add(T a,T b)
  T add(T a,T b)
58行目: 58行目:
<br>
<br>
===== 関数テンプレート =====
===== 関数テンプレート =====
  <source lang="c++">
  <syntaxhighlight lang="c++">
  template <typename T>
  template <typename T>
  T add(T a, T b)
  T add(T a, T b)
68行目: 68行目:
===== クラステンプレート =====
===== クラステンプレート =====
宣言方法は、下記のようにすると、テンプレート引数に指定した型を持つようになる。<br>
宣言方法は、下記のようにすると、テンプレート引数に指定した型を持つようになる。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  CMyClass<int> clsHoge();  // テンプレートクラスのインスタンス生成
  CMyClass<int> clsHoge();  // テンプレートクラスのインスタンス生成
  </source>
  </source>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  template <typename T>
  template <typename T>
  class CMyClass
  class CMyClass
85行目: 85行目:
任意のメンバ関数にだけ関数テンプレートを使用することもできる。<br>
任意のメンバ関数にだけ関数テンプレートを使用することもできる。<br>
定義方法は、関数テンプレートとほぼ同じである。<br>
定義方法は、関数テンプレートとほぼ同じである。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  class CMyClass
  class CMyClass
  {
  {
100行目: 100行目:
C++11から、typedefをusingで記述できるようになった。<br>
C++11から、typedefをusingで記述できるようになった。<br>
以下の2つは同様の意味を持つ。<br>
以下の2つは同様の意味を持つ。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  typedef TypographicError typo;
  typedef TypographicError typo;
  using typo = TypographicError;
  using typo = TypographicError;
107行目: 107行目:
また、usingを用いたエイリアスにはテンプレートを使用することができる。<br>
また、usingを用いたエイリアスにはテンプレートを使用することができる。<br>
このように、型のエイリアスの作成、テンプレート引数の再編成などが行える。<br>
このように、型のエイリアスの作成、テンプレート引数の再編成などが行える。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  UsingTemplate.cpp
  UsingTemplate.cpp
  template<typename T, typename U>
  template<typename T, typename U>