スポンサーリンク

| キーワード:

可変長テンプレート引数のパラメータパックはinitializer_listに変換できるらしい

初めて知った。可変長テンプレート引数を使ったからと言って必ずしも再帰せずにすむ。

template<typename... Args>
void myprint(const Args... args) {

  //型が違うと暗黙キャストがきなくてエラーになったりするのでstatic_castする
  auto ini_list = { static_cast<double>(args)... };// init_listの型はinitializer_list<double>

  for (const auto d : ini_list) {
    std::cout << d << std::endl;
  }
}
int main()
{
  myprint(3.5, 3, 5.f);
}

上記の用途なら以下のように書くとシンプルになる。

#include <string>

template<typename... Args>
void myprint(const Args... args) {

  for (const auto& s: { std::to_string(args)... }) {
    std::cout << s << std::endl;
  }

}

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: