最終更新日時(UTC):
が更新

履歴 編集

autoパラメータによる関数テンプレートの簡易定義(C++20)

概要

C++14で導入されたジェネリックラムダと同様に、通常の関数もパラメータ型をautoにすることで、簡易的に関数テンプレートを定義できるようにする。

パラメータ型をautoとしたそれぞれのパラメータに対して、個別にテンプレートパラメータが割り振られる。

制限としては、以下のようなものがある:

  • パラメータ型にdecltype(auto)は使用できない
  • std::vector<auto>のように型の一部をautoにはできない

autoで定義した変数の型をとりたい場合は、decltypeを使用する。

#include <iostream>

auto f(auto a, auto b) { return a + b; }

// 以下と同じ意味になる:
// template <class T, class U>
// auto f(T a, U b) { return a + b; }

int main()
{
  // パラメータaとbの型はint
  std::cout << f(1, 2) << std::endl;

  // パラメータaとbの型はdouble
  std::cout << f(0.1, 0.2) << std::endl;
}

出力

3
0.3

関連項目

参照