15 Şubat 2017 Çarşamba

std::uniform_int_distribution Sınıfı

Giriş
Uniform Distribution tek düze dağılım demek.

Bu sınıf uniform_real_distribution, sınıfı ile kardeştir.

Constructor'a 
bir üreteç nesnesi verilir

Hangi Tiplerler Kullanılabilir
Bu sınıf sadece belli tiplerle kullanılabilir. Mesela uint8_t ile kullanılamaz.
The effect is undefined if this is not one of short, int, long, long long, unsigned short, unsigned int, unsigned long, or unsigned long long.
Yani şu kod yanlış
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<uint8_t> dd(0, 255); //Don't do this!
...
ch = uint8_t(dd(gen));
bool olarak kullanmak
Şöyle yaparız.
std::random_device   rd;
std::uniform_int_distribution<> randomizer(0, 1);
const int val randomizer(std::mt19937(rd()));
const bool result = static_cast<bool>(val);
Sınıf Ne İşe Yarar
Sınıf tek düze dağılım yapar. Dağılım [a-b] arasında kapalı bir dağılımdırÖrnek:
#include <random>
...
std::default_random_engine generator;
std::uniform_int_distribution<int> distribution(1,6);
int dice_roll = distribution(generator);  //range 1..6
Eğer istersek aralık vermeyiz. Bu durumda generator 0, ve uint max arasında bir dağılım elde ederiz.
#include <random>
#include <chrono>

auto seed = std::chrono::system_clock::now().time_since_epoch().count();
std::default_random_engine generator(seed);
std::uniform_int_distribution<uint> distribution;
uint randomUint = distribution(generator);
Sınıfın Maliyeti
Bu sınıfı yaratmak pahalı değildir. Bu yüzden stack'te defalarca yaratılabilir. Örnekte DrawNumber metodu her çağrıldığında bir uniform_int_distribution nesnesi yaratıyor ancak işlemci kullanımına etkisi çok az.
using uint32 = unsigned int;

class Random {
public:
    Random() = default;
    Random(std::mt19937::result_type seed) : eng(seed) {}
    uint32 DrawNumber(uint32 min, uint32 max);

private:        
    std::mt19937 eng{std::random_device{}()};
};

uint32 Random::DrawNumber(uint32 min, uint32 max)
{
    return std::uniform_int_distribution<uint32>{min, max}(eng);
}

11 Şubat 2017 Cumartesi

istream::sentry Sınıfı

Şöyle yaparız.
std::istream is = ...;

std::istream::sentry se(inf, true);
if (!se) {
 return false;
}

7 Şubat 2017 Salı

Code Generator

Giriş 
Bir sürü kez XML'den kod üretmek zorunda kaldım.
XML

Getter/Setter üretmek için şu alanlar lazım.
Name
Type

Constructor'da ilklendirmek için şu alan lazım.
Default Value


5 Şubat 2017 Pazar

std::unary_function

Giriş
Bu metod C++17'den itibaren kaldırıldı. Açıklaması şöyle
std::unary_function, has been deprecated since C++11 and was removed from the standard for C++17.

4 Şubat 2017 Cumartesi

setenv

Giriş
Şu satırı dahil ederiz. Bu metod C++standardının bir metodu değil. POSIX standardı tanımlıyor.
"#include"<stdlib.h>
İmzası şöyle
int setenv(const char *v_name, const char *v_value, int overwrite);