「C++の基礎 - 可変長引数」の版間の差分

ナビゲーションに移動 検索に移動
文字列「<source lang」を「<syntaxhighlight lang」に置換
(Wiki がページ「可変長引数を実現する方法(C++)」を「C++の基礎 - 可変長引数」に、リダイレクトを残さずに移動しました)
(文字列「<source lang」を「<syntaxhighlight lang」に置換)
5行目: 5行目:
== 可変長引数テンプレート ==
== 可変長引数テンプレート ==
この方法は、最も簡潔な方法である。<br>
この方法は、最も簡潔な方法である。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  template<typename... T>
  template<typename... T>
  int sum(T... args)
  int sum(T... args)
18行目: 18行目:
  }
  }
  </source>
  </source>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  // 使用方法
  // 使用方法
  std::cout << sum();        // 0
  std::cout << sum();        // 0
43行目: 43行目:
sum(2, 3)は再帰呼び出しとなるため、再びテンプレート関数(2)呼び出され、先程と同じ手順による展開が行われる。(return 2 + sum(3);)<br>
sum(2, 3)は再帰呼び出しとなるため、再びテンプレート関数(2)呼び出され、先程と同じ手順による展開が行われる。(return 2 + sum(3);)<br>
最後に、sum(3)がテンプレート関数(1)に適用される形となる。<br>
最後に、sum(3)がテンプレート関数(1)に適用される形となる。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  // (1)
  // (1)
  template<typename First>
  template<typename First>
66行目: 66行目:
<br>
<br>
これら一連の展開が完了すると、およそ以下のような実行コードが形成されることになる。<br>
これら一連の展開が完了すると、およそ以下のような実行コードが形成されることになる。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  int sum(int c) { reutrn c; }
  int sum(int c) { reutrn c; }
  int sum(int b, int c) { reutrn b + sum(c); }
  int sum(int b, int c) { reutrn b + sum(c); }
81行目: 81行目:
若干趣旨が異なるが、初期化子リストを受け取るためのクラスstd::initializer_listを活用する方法もある。<br>
若干趣旨が異なるが、初期化子リストを受け取るためのクラスstd::initializer_listを活用する方法もある。<br>
ソースコードの役割を明確化したり、可読性を高めたりするための用途として活用できる。<br>
ソースコードの役割を明確化したり、可読性を高めたりするための用途として活用できる。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  int sum(std::initializer_list<int> list)
  int sum(std::initializer_list<int> list)
  {
  {
100行目: 100行目:
  </source>
  </source>
<br>
<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  return contain(extention, {"cpp", "cc", "cp"});
  return contain(extention, {"cpp", "cc", "cp"});
  </source>
  </source>

案内メニュー