31 Ocak 2018 Çarşamba

std::index_sequence_for

Giriş
std::tuple, std::array gibi dizilerdeki elemanları açarak teker teker parametre olarak başka bir metoda sokmak için kullanılır.

Örnek
Elimizde şöyle bir metod olsun.
void printNumber(const int& x, const int& y)
{
  std::cout << "ONE" << std::endl;
}
Bu metodu çağıran şöyle bir kod olsun.
template<typename... TTuple, std::size_t... Indices>
auto apply_sequence(const std::tuple<TTuple...>& tuple, std::index_sequence<Indices...>)
{
  return printNumber(std::get<Indices>(tuple)...);
}

template<typename... TTuple>
auto apply_tuple(const std::tuple<TTuple...>& tuple)
{
  return apply_sequence(tuple, std::index_sequence_for<TTuple...>());
}
Çağırmak için şöyle yaparız.
std::tuple<int, int> one { 1, 2 };
apply_tuple(one); // ONE

Hiç yorum yok:

Yorum Gönder