Giriş
std::tie ve std::tuple birbirlerinden ayrılmaz kavramlar. tie ile tuple içindeki parçalara erişimi kolaylaştırılır. Hatta kısmi bir görüntü elde edebiliriz.
std::tie ve std::tuple birbirlerinden ayrılmaz kavramlar. tie ile tuple içindeki parçalara erişimi kolaylaştırılır. Hatta kısmi bir görüntü elde edebiliriz.
Kullanım
Önce tie içinde kullanılacak değişkenler tanımlanır. Daha sonra Tie = Tuple şeklinde bağlama işlemi geçekleştirilir.
Örnek
Şöyle yaparız.
int a, b;
std::tie(a, b) = std::make_tuple(2, 3);
// a is now 2, b is now 3
ÖrnekŞöyle yaparız.
std::tuple<int, bool, double> my_obj {1, false, 2.0};
// later on...
int x;
bool y;
double z;
std::tie(x, y, z) = my_obj;
// or, if we don't want all the contents:
std::tie(std::ignore, y, std::ignore) = my_obj;
std::tie ve const referencef tuple dönen bir metod olsun. Şöyle yaparız.
const auto& [a, b] = f();
Bu kod şununla aynıdır.const auto& e = f(); // 1
using E = remove_reference_t<decltype((e))>;
std::tuple_element<0, E>::type& a = get<0>(e);
std::tuple_element<1, E>::type& b = get<1>(e);
std::get ile kullanımEğer istenirse tie std::get ile de kullanılabilir ancak bu kullanımın bence hiç bir avantajı bulunmuyor.
#include <iostream>
#include <tuple>
#include <map>
using namespace std;
// an abstact object consisting of key-value pairs
struct thing
{
std::map<std::string, std::string> kv;
};
int main()
{
thing animal;
animal.kv["species"] = "dog";
animal.kv["sound"] = "woof";
auto species = std::tie(animal.kv["species"], animal.kv["sound"]);
std::cout << "The "<< std::get<0>(species)<<" says "<< std::get<1>(species);
return 0;
}
std::tie ve eşitlikstd::tie eşitlik için kullanılabilir.
int a,b,c,d,e,f;
return std::tie(a,b,c,d,e,f) == std::tie(rhs.a,rhs.b,rhs.c,rhs.d,rhs.e,rhs.f); }
std::tie ve küçüktürstd::tie küçüktür karşılaştırması için kullanılabilir.
std::tie(a,b) < std::tie(rhs.a, rhs.b);
std::tie Allta Nasıl Çalışır
std::tuple şöyle bir operator sağlar
C++17
C++17 structured binding sağlar. Bu yeni kullanım şekli ile std::tie kullanmaya gerek yok. Kullanım şekli için Structured Binding yazısına bakınız.
std::tuple şöyle bir operator sağlar
template< class... UTypes >
tuple& operator=( const tuple<UTypes...>& other );
Eğer şöyle bir kod yazarsak tuple içindeki değişkene referans alabiliriz.int a;
std::tuple<int&>{a} = std::tuple<int>{24};
return a; // 24
std::tie bu kodu bizim için üretir.C++17
C++17 structured binding sağlar. Bu yeni kullanım şekli ile std::tie kullanmaya gerek yok. Kullanım şekli için Structured Binding yazısına bakınız.
Hiç yorum yok:
Yorum Gönder