Giriş
Şu satırı dahil ederiz.
Composition
Inheritance ile çalışmaz ancak composition ile çalışır.
Örnek
Elimizde şu kod olsun.
Şöyle yaparız.
Erişim sırasını değiştirmek içinş şöyle yaparız.
Örnek - boost::optional
Şöyle yaparız.
Şöyle yaparız. Böylece fusion << operatorü ile yazılabilen bir struct elde ederiz.
Şöyle yaparız.
Şu satırı dahil ederiz.
#include <boost/fusion/include/adapt_struct.hpp>
#include <boost/fusion/include/io.hpp>
BOOST_FUSION_ADAPT_STRUCT bir macro.Composition
Inheritance ile çalışmaz ancak composition ile çalışır.
Örnek
Elimizde şu kod olsun.
struct cat
{
int tail;
int head;
};
struct bird
{
int wing;
int bursa;
};
Şu kod derlenmez.struct wat : public cat, public bird
{
};
BOOST_FUSION_ADAPT_STRUCT(cat,tail,head)
BOOST_FUSION_ADAPT_STRUCT(bird, wing, bursa)
BOOST_FUSION_ADAPT_STRUCT(wat, wat::cat, wat::bird)
ÖrnekŞöyle yaparız.
struct cat {
int tail;
int head;
};
struct bird {
int wing;
int cloaca;
};
struct wat {
cat _cat;
bird _bird;
};
BOOST_FUSION_ADAPT_STRUCT(cat, tail, head)
BOOST_FUSION_ADAPT_STRUCT(bird, wing, cloaca)
BOOST_FUSION_ADAPT_STRUCT(wat, _cat, _bird)
Örnek - erişim sırasını değiştirmekErişim sırasını değiştirmek içinş şöyle yaparız.
struct MyStruct { int a, b, c; };
BOOST_FUSION_ADAPT_STRUCT(MyStruct, c, b, a)
Elimde şöyle değişken olsun.MyStruct { 3, 2, 1 }
Değişken içinde a = 3 iken fusion içinde sırayla dolaşırken 1,2,3 çıktısını alırız. Yani döngüde önce c alanı gelir ve değeri doğru şekilde 1'dir.Örnek - boost::optional
Şöyle yaparız.
struct MyStruct {
boost::optional<std::string> one;
boost::optional<int> two;
boost::optional<double> three;
};
BOOST_FUSION_ADAPT_STRUCT(MyStruct, one, two, three)
Örnek - enumŞöyle yaparız. Böylece fusion << operatorü ile yazılabilen bir struct elde ederiz.
struct Struct {
enum class Type {
A,B
};
Type type;
int value;
};
BOOST_FUSION_ADAPT_STRUCT(Struct, type, value);
Örnek - std::vectorŞöyle yaparız.
namespace model
{
struct spectrum {
std::string comment;
std::string file;
std::string nativeId;
double precursorMz;
int precursorCharge;
double precursorIntensity;
};
struct cluster {
std::string id;
std::vector<spectrum> spectra;
};
}
BOOST_FUSION_ADAPT_STRUCT(model::spectrum, comment, file, nativeId, precursorMz,
precursorCharge, precursorIntensity)
BOOST_FUSION_ADAPT_STRUCT(model::cluster, id, spectra)
Hiç yorum yok:
Yorum Gönder