Örnek
Elimizde şu kod olsun.
Elimizde şu kod olsun.
#include <boost/fusion/include/adapted.hpp>
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)
Her alanı dolaşmak için şöyle yaparız.
template <typename T, int N = 0>
void print(T const& obj) {
namespace fus = boost::fusion;
if constexpr (fus::traits::is_sequence<T>::value) {
if (N==0)
std::cout << "{";
if constexpr (N < fus::size(obj).value) {
auto name = boost::fusion::extension::struct_member_name<T, N>::call();
std::cout << ' ' << name << '=';
print(fus::at_c<N>(obj));
std::cout << ';';
print<T, N+1>(obj);
} else {
std::cout << " }";
}
} else {
std::cout << obj;
}
}
Çağırmak için şöyle yaparız.
print(wat { {1,2}, {3,4} });
Çıktı olarak şunu alırız.{ _cat={ tail=1; head=2; }; _bird={ wing=3; cloaca=4; }; }
Hiç yorum yok:
Yorum Gönder