29 Eylül 2017 Cuma

property_tree ptree_bad_data Exception Sınıfı

Constructor
İmzası şöyle
template<typename T> ptree_bad_data(const std::string &, const T &);

27 Eylül 2017 Çarşamba

graph make_transform_value_property_map metodu

Giriş
Şu satırı dahil ederiz.
#include <boost/property_map/transform_value_property_map.hpp>
Graph'ı dolaşırken belirtilen metodu çağırarak graph vertex'inden bilgi almayı sağlar.

Birinci parametre çağrılacak metod veya üye alandır. İkinci parametre ise vertex dizisidir.

Örnek
Elimizde bir graph olsun
using Graph = boost::adjacency_list<boost::vecS, boost::vecS, boost::directedS,
  std::shared_ptr<Foo> >;
Bu graph'ı dolduralım ve daha sonra ekranda göstermek isteyelim. Şöyle yaparız.
#include <boost/graph/graph_utility.hpp>
void DebugPrint(std::string const& caption, Graph const& g) {
  auto name_map = boost::make_transform_value_property_map(std::mem_fn(&Foo::name),
    get(boost::vertex_bundle, g));

  boost::print_graph(g, name_map, std::cout << "==== " << caption << "\n");
}
Metodu çağırmak için şöyle yaparız.
DebugPrint("graph", g);
Çıktı olarak şunu alırız
==== graph
Foo 0 --> Foo 1 
Foo 1 --> 

range Provide Ranges

any_range Sınıfı
Şu satırı dahil ederiz.
#include <boost/range/any_range.hpp>
Bu sınıf boost adaptorlerinin döndürdüğü range nesnesini sarmalayabilir.
Tanımlama
Şöyle yaparız
boost::any_range<std::shared_ptr<Foo>,boost::forward_traversal_tag> range;
Şöyle yaparız. Burada reference type ta belirtiliyor.
using FooRange = boost::any_range<FooPtr, boost::forward_traversal_tag, FooPtr const>;
Örnek
Şöyle yaparız.
std::vector<int> myInts = { 1,2,3,4,5 };
boost::any_range<const double,boost::forward_traversal_tag,const double> range =
    myInts | boost::adaptors::transformed(
      []( int x ) { return static_cast<double>( x ); } );

for ( double x : range )
    std::cout << x << "\n"; 
counting_range Sınıfı
Açıklaması şöyle
"A Range provides iterators for accessing a half-open range [first,one_past_last) of elements..."
Şöyle yaparız.
// Days of the week
for (auto const &i : boost::counting_range(0, 7))
//for (int i = 0; i <= 6; i++)
{
  ...
}
istream_range Sınıfı
Örnek ver

irange Sınıfı
Örnek ver

26 Eylül 2017 Salı

bootstrap komutu

Giriş
Bu işe başlamadan önce Windows için hazırlanmış olan prebuilt binary dosyalarını indirip kullanmak çok daha kolay. Bu yöntemi tavsiye ederim.

Precompiled Binary Seçenekleri
Açıklaması şöyle
Setup executables have command line switches /SP-, /SILENT, /VERYSILENT, that disable installation messages.

/NOCANCEL is also worthy to note.

Run them with /? to get full list of supported options.
Devam
Önce boost Downloads dizinine indirilir ve /usr/include gibi bir dizine açılır. Şöyle yaparız.
tar zxvf ~/Downloads/boost_1_62_0.tar.gz -C /usr/include/
bjam ve b2 uygulamalarını üretmek için kullanılır. Şöyle yaparız.
cd C:\boost_1_61_0
bootstrap.bat
Çalışmaya başlayınca şu çıktıyı alırız.
C:\Boost\boost_1_63_0>bootstrap.bat
Building Boost.Build engine
...
gcc seçeneği
Şöyle yaparız.
cd <boost_root>\tools\build
bootstrap.bat gcc
cd ..\..
tools\build\b2.exe --prefix=<boost_install_root> toolset=gcc link=static
--prefix seçeneği
Şöyle yaparız. Bu seçeneği kullanırsak b2 komutuna --prefix seçeneği kullanmaya gerek kalmaz.
./bootstrap.sh --prefix=/usr/local
--with-libraries seçeneği
Şöyle yaparız.
/bootstrap.sh --prefix=/usr/local/boost --with-libraries=filesystem,system
--with-python-root seçeneği
Şöyle yaparız.
./bootstrap.sh --with-python-root=/cygdrive/c/Python27/
--with-toolset seçeneği
Şöyle yaparız.
./bootstrap.sh --with-toolset=clang