25 Haziran 2019 Salı

std::exchange metodu

Giriş
C++14 ile geliyor. İmzası şöyle
template< class T, class U = T >
T exchange( T& obj, U&& new_value );
Açıklaması şöyle
Replaces the value of obj with new_value and returns the old value of obj.
İçi şöyledir.
template<class T, class U = T>
T exchange(T& obj, U&& new_value)
{
  T old_value = std::move(obj);
  obj = std::forward<U>(new_value);
  return old_value;
}
Örnek
Bir if koşulunun tek bir kere çalışmasını istersek şöyle yaparız.
if (static bool do_once = true; std::exchange(do_once, false)){...}
std::exhange() kullanmak istemiyorsak şöyle yaparız.
if (static bool do_once = true; do_once) { // enter only once
  std::cout << "hello one-shot" << std::endl;
  // possibly much more code
  do_once = false;
}


Hiç yorum yok:

Yorum Gönder