boost ile kullandığım bazı sınıfları not olsun diye aşağıya ekliyorum.
boost ve namespace
Boost kendi içindeki sınıfları saklamak için genellikle namespace içinde başka namespace'ler açıyor. Dışarı açılması istenilmeyen sınıflar içerdeki namespace'e yerleştiriliyorlar. Örnek:
namespace super_cool_library {
namespace detail {
class bar { };
}
class foo : detail::bar {
};
}
join işlemi için String Algoritmaları yazısına bakabilirsiniz.
boost adaptor
Listeyi 4'er 4'er dolaşmak için
#include <boost/range/adaptor/sliced.hpp>
#include <vector>
#include <iostream>
int main(int argc, const char* argv[])
{
std::vector<int> input={1,2,3,4,5,6,7,8,9};
const int N = 4;
using boost::adaptors::sliced;
for (auto&& e: input | sliced(0, N))
std::cout << e << std::endl;
}
boost asio
acceptor sınıfı
acceptor sınıf içine bir socket alır ve async_accept metodu çağırılır. Örnek:
void Server::Accept() {
socket_.reset(new boost::asio::ip::tcp::socket(*io_service_));
acceptor_.async_accept(*socket_,
boost::bind(&Server::HandleAccept, this, boost::asio::placeholders::error));
}
void Server::HandleAccept(const boost::system::error_code& error) {
if (!error) {
// TODO
} else {
TRACE_ERROR("Server::HandleAccept: Error!");
}
Accept();
}
boost atomic
boost bind
boost bind eğer bir nesnenin metoduna function pointer olarak kullanılacaksa, ikinci parametre olarak nesneyi geçmek gerekir. Örnek:
bind(&client::passwordAttemptCallBack, &myClient, _1)
boost datastructures
Bu projede envai çeşit heap veri yapısı var. En kolayı balanced binary heap.
fibonacci_heap
Örnek:
tpedef boost::heap::fibonacci_heap<struct c*, boost::heap::compare<compare>> myheap;
paring_heap
Örnek:
typedef boost::heap::pairing_heap<struct c, boost::heap::compare<my_compare> > myheap;
.
boost exceptionboost exception altındaki diagnostic_information sınıfı ile exception string'e çevirilebiliyor. Örnek:
boost flat_map
flat_map ile map arayüzüne sahip ancak arka tarafta array kullanan bir veri yapısı sunuluyor.
boost functional
hash alabilme yeteneği sunuyor. hash açıklamasını buraya taşıdım.
boost future
boost flat_map
flat_map ile map arayüzüne sahip ancak arka tarafta array kullanan bir veri yapısı sunuluyor.
boost functional
hash alabilme yeteneği sunuyor. hash açıklamasını buraya taşıdım.
boost future
future ve promise bir şekilde beraber kullanılıyorlar sanırım.
wait_for
boost::promise<void> p;
boost::future<void> f = p.get_future();
boost::thread t([&]() { invoke(request, response); p.set_value(); });
bool did_finish = (f.wait_for(boost::chrono::milliseconds(timeout)) == boost::future_status::ready)
boost generator iterator
Verilen generator kullanılarak bir input iterator yaratılır. Infinite sequence yapma örneği:
boost heap
priority heap örneği buradan geldi.
boost interval container library
boost::icl::interval_map için örnek bulmam lazım.
boost::lock_guard
boost interprocess
Örneği buradan aldım.
#include <boost/interprocess/windows_shared_memory.hpp>
#include <boost/interprocess/mapped_region.hpp>
#include <cstring>
#include <cstdlib>
#include <string>
using namespace boost::interprocess;
//Yazma için
//Create a native windows shared memory object.
windows_shared_memory shm (create_only, "MySharedMemory", read_write, 1000);
//Map the whole shared memory in this process
mapped_region region(shm, read_write);
//Write all the memory to 1
std::memset(region.get_address(), 1, region.get_size());
//Okuma için
//Open already created shared memory object.
windows_shared_memory shm (open_only, "MySharedMemory", read_only);
//Map the whole shared memory in this process
mapped_region region(shm, read_only);
//Check that memory was initialized to 1
char *mem = static_cast<char*>(region.get_address());
Buradaki örnekte ise windows_shared_memory yerine daha portable olduğunu sandığım bir başka kod kullanılmış.
#include "boost/interprocess/file_mapping.hpp"
#include "boost/interprocess/mapped_region.hpp"
using namespace boost::interprocess;
//Create a shared memory object.
file_mapping m_file("MySharedMemory", read_write);
//Map the whole shared memory in this process
mapped_region region(file_mapping, read_write);
//when done
file_mapping::remove("MySharedMemory");
Örnekte ise memory mapped file üzerinde karakter karakter dolaşma var.
boost::irange
Range başlıklı yazıya bakınız.
boost iterator_adaptor
Verilen iki range'i birleştiren bir iterator adaptor örneği burada. Bir başka örnek ise burada.
iterator_adaptor tanımlamak için kullanılan kod aşağıdakine benzer.
class myiterator : public boost::iterator_adaptor<CRTP,iterator,iterator::value_type>
{
}
CRTP , Curiously recurring template pattern anlamına gelir. İkinci parametre gerçek iterator, üçüncü parametre ise iterator'ün döndürdüğü veri tipini anlamına gelir.
boost I/O kütüphanesi
Bu konu ile ilgili yazıları Boost I/O kütüphanesi başlıklı yazıya taşıdım.boost::lock_guard
Bu konu ile ilgili Posix Eşzamanlılık Yapıları başlıklı yazıya göz atabilirsiniz.
boost program_options
Komut Satırı Parse Etme yazısına bakılabilir.
boost range adaptors
boost range adaptors ile bir range dönüştürülerek başka bir range elde ediliyor.Aşağıdaki örneği buradan aldım ve dönüşümü gösteriyor.
boost optional
Konuyu Nullable ve Optional başlıklı yazıya taşıdım.boost scoped_ptr
std::auto_ptr'nin tersine release metodu yoktur ve pointer başka bir değişkene aktarılamaz.
boost::scoped_array de aynı mantıkla çalışır ancak array veri yapılarını "delete []" ile siler.
boost tuple
std::tuple çıktıktan sonra belki gerek kalmadı ancak örnek olsun diye aldım.
#include <boost/fusion/include/boost_tuple.hpp>
boost::tuple< std::string, int > t = boost::make_tuple( "foo", 42 );
boost::tuple< std::string, int > t = boost::make_tuple( "foo", 42 );
boost unit
boost unit kütüphanesi stream ile gayet iyi çalışıyor ancak printf gibi metodlarla çalışmıyor. Çalıştırmak için aşağıdaki örnek kullanılabilir.
Hiç yorum yok:
Yorum Gönder