Giriş
Şu satırı dahil ederiz.
Örnek
Şöyle yaparız.
Örnek
Elimizde bir karma grameri olsun
Gramer olarak bir struct'ı html'te iki tane yanyana sütun olacak şekilde çevirmek olsun. Şöyle yaparız.
Şöyle yaparız. Her employee nesnesinden sonra satır sonu yapılır. Her iki employee nesnesinden sonra nt_delimeter kelimesi eklenir.
Şu satırı dahil ederiz.
#include <boost/spirit/include/karma.hpp>
Şu satırı dahil ederiz.namespace ka = boost::spirit::karma;
format metoduÖrnek
Şöyle yaparız.
#include <boost/spirit/include/karma.hpp>
struct Nil final {};
using FooVariant = boost::variant<Nil, std::string, int>;
template<typename OutputIt = boost::spirit::ostream_iterator>
struct FooGenerator : boost::spirit::karma::grammar<OutputIt, FooVariant()>
{
FooGenerator()
: FooGenerator::base_type(start_)
{
...
start_ = ...;
}
boost::spirit::karma::rule<OutputIt, FooVariant()> start_;
};
int main() {
for (auto fo : { FooVariant{}, {FooVariant{42}}, {FooVariant{"Hello\r\nWorld!"}} }) {
std::cout << boost::spirit::karma::format(FooGenerator<>(), fo) << std::endl;
}
}
generate metodu
Örnek
Elimizde bir karma grameri olsun
template<typename Iterator>
struct MyKarmaGrammar : ka::grammar<Iterator, MyStruct()> {
...
};
Şöyle yaparız. İlk parametre iterator, ikinci parametre gramer, üçüncü parametre girdi olan veridir.auto request MyStruct { ... };
std::string generated;
std::back_insert_iterator<std::string> sink(generated);
MyKarmaGrammar<std::back_insert_iterator<std::string>> serializer;
ka::generate(sink, serializer, request);
Örnek - columnsGramer olarak bir struct'ı html'te iki tane yanyana sütun olacak şekilde çevirmek olsun. Şöyle yaparız.
using Attr = client::employee;
rule<Sink, Attr()> small_box = "<B>" << string << "<1>"
<< string << "<2>"
<< string << "<3>";
ka::generate(sink, columns(2, "<nth_delimiter>\n") [+small_box], employees);
Her satır <B> ile başlar, iki tane employee nesnesi içerir. Satır sonu nth_delimeter kelimesi ile biter. Satır şöyledir<B>int<1>f1.1<2>f1.2<3><B>float<1>f2.1<2>f2.3<3><nth_delimiter>
Örnek - columns + %eolŞöyle yaparız. Her employee nesnesinden sonra satır sonu yapılır. Her iki employee nesnesinden sonra nt_delimeter kelimesi eklenir.
generate(sink, columns(2, "<nth_delimiter>") [small_box % eol], employees);
Hiç yorum yok:
Yorum Gönder