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

とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

make_array 書いてみた

C++

お遊び。
要素数を推論してくれる make_array 書いてみた。auto とか range-based for を使えば要素数はどこにも出なくなる。

#include<array>
#include<type_traits>

template<class T>
constexpr std::array<T, 0> make_array()
{
 return std::array<T, 0>{{}};
}

template<class... T>
constexpr std::array<typename std::common_type<T...>::type, sizeof...(T)> make_array(T... args)
{
 return std::array<typename std::common_type<T...>::type, sizeof...(T)>{{args...}};
}

#include<cassert>
#include<iostream>

int main()
{
 auto a = make_array(0);
 for(auto const i: a)
  std::cout << i << ", ";
 std::cout << std::endl;
 
 auto b = make_array(0, 1U, 2L, 3UL);
 for(auto const i: b)
  std::cout << i << ", ";
 std::cout << std::endl;
 
 auto c = make_array(1.41, 2.23F, 1.73);
 for(auto const i: c)
  std::cout << i * i << ", ";
 std::cout << std::endl;

 auto d = make_array<int>();
 for(auto const i: d)
  std::cout << i << ", ";
 std::cout << std::endl;
}

実行結果:

0,
0, 1, 2, 3,
1.9881, 4.9729, 2.9929,

何で標準ライブラリに無いんでしょうねぇ。