C++17 - std::any
Yeni gelen standartlarla C++ daha güvenli bir dil olmaya devam ediyor diye bahsetmiştik. Şimdi ise generic pointer olan void * ‘ a alternatif olarak sunulan
bir başka wrapper sınıf olan std::any’den bahsedelim.
Bu arada typesafe derken ne demek istediğimi aşağıdaki bir örnekle açıklayayım;
printf("onion price %s try\n", 5.2); |
yukarıdaki kod parçasında aslında format bizden string türünden (char * veya const char *) beklerken programcı tarafından double veya float türünden bir değer parametre olarak geçilmiş. Derleme zamanında böyle bir kontrol olmadığından çalışma zamanında program büyük bir ihtimalle segmentation fault verecek. std::any’ de ise tür verisi de muhafaza edildiğinden derleme zamanında bu tarz hataları vererek daha güvenli programlar yazmaya yardımcı oluyor.
std::any a(5); |
reset() fonksiyonu ile mevcut veri destruct edilerek std::any objesi boş hale gelir. Dikkat edilmesi gereken diğer bir husus ise std::any_cast
auto a = std::make_any<MyString>{"hello"}; |
std::any