optional Sınıfı
Giriş
Şu satırı dahil ederiz.
Eğer optional'a değer atanmamış diye belirtmek istersek şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.Bu metod yerine eski kodlarda in_place yöntemi kullanılıyor.
Şöyle yaparız.
operator <<
Giriş
Şu satırı dahil ederiz.
#include <boost/optional.hpp>
Bu sınıf kabaca şöyledir.struct {
bool _present;
T _t;
}
none SabitiEğer optional'a değer atanmamış diye belirtmek istersek şöyle yaparız.
f(..., optional<T> default_argument = boost::none)
ConstructorŞöyle yaparız.
boost::optional<int> optType;
Şöyle yaparızoptType = boost::make_optional<int
> (2);
Şöyle yaparızoptType = boost::none
;
emplace metoduŞöyle yaparız.Bu metod yerine eski kodlarda in_place yöntemi kullanılıyor.
boost::optional<int> x;
x.emplace(3);
get_value_or_default metodu
Elimizde şöyle bir optional olsun.boost::optional<TYPE> optType;
Şöyle yaparız.TYPE t =
optType.get_value_or(default);
is_initialized() metodu
Bu metod 1.64 sürüm ile deprecated olarak işaretli. Bu meto yerine boost::none ile karşılaştırma öneriliyor.
operator bool
explicit tanımlıdır. boost::optional if yapısı ile rahatlıkla kullanılabilir. Ancak boost::optional direkt bool'a çevrilemez. Şöyle yaparsakBu metod 1.64 sürüm ile deprecated olarak işaretli. Bu meto yerine boost::none ile karşılaştırma öneriliyor.
operator bool
bool val = boost::optional<SomeType> o;
Çıktı olarak şunu alırız.error: cannot convert boost::optional<SomeType> to bool in return
operator =Şöyle yaparız.
boost::optional<MyClass> oi;
oi = MyClass(4, 5);
Free Style Metodlaroperator <<
boost/optional.hpp dosyasında şu metod tanımlı
Kalıtım
template<class CharType, class CharTrait, class T>
std::basic_ostream<CharType, CharTrait>&
operator<<(std::basic_ostream<CharType, CharTrait>& out, optional<T> const& v);
Ama metodun kendisi için şu satırı dahil ederiz.#include <boost/optional/optional_io.hpp>
Doldurulmamış bir optional nesnesi false döner.#include <boost/optional.hpp>
#include <iostream>
int main()
{
boost::optional<int> oi;
std::cout << oi << "\n"; //False
}
Doldurulmuş bir optional nesnesi ise stream'e ' ' + optional nesnesini yazar.Kalıtım
Bu sınıf kalıtımı desteklemez. Yani şu kod derlenmez.
class Base {};
class Derived : public Base {};
void func(boost::optional<Base>&) {}
int main () {
boost::optional<Derived> x;
func(x); //Error
}
Hiç yorum yok:
Yorum Gönder