C++17 özellİklerİ: std::variant

Union, struct’a benzer ama üyelerinden yalnızca bir tanesinin değerini tutar. variant, C’den alınan union’ın geliştirilmiş halidir, C++17 ile birlikte dile eklendi. union’ın beklenmedik davranışına karşın type-safe’tir.

Mesela bir,

union u { int i; double d; } u;

u.i = 10;

şimdiye kadar bir sorun yok gibi, ama union’ın diğer elemanında erişmeye kalkarsak;

std::cout << u.d; // ???

Bu belirsiz davranış, variant kullanılarak engellenebilir.

std::variant<int, double> v;

v = 12; 

int i =  get<int>(v); // i == 12
std::cout <<  get<0>(v); // 12
std::cout << get<int>(v); // 12

diğer üyeye erişmeye çalıştığımızda bir exception alırız:

std::cout << get<1>(v);
std::cout << get<double>(v);
terminate called after throwing an instance of 'std::bad_variant_access'
  what():  Unexpected index
  

C++17

111 Words

2018-05-17 03:00 +0300