Merhaba,
Ben surda
https://github.com/kerdemdemir/sharpEar/blob/e8c607defdd0489e1b4e058983e25bad6773edda/utility/types.h
ve surda
https://github.com/kerdemdemir/sharpEar/blob/6193fad5a776b246caed72d89009d64afc1db5a0/environment/roomOracle.cpp
Su sekilde kullanmistim. Bu std::ref ' i (aslinda std::ref'i degil ama std::ref'in yarattigi std::reference_wrapper' i )
using SoundDataRef = ref_t<SoundData>;
void roomOracle::preprocess(const std::vector< SoundDataRef > &input, int packetCount )
Benim cektigim sikinti bu referanslara atamayi hayata getirme aninda yapmamiz gerekmesinden kaynaklaniyordu.
Yani
int c;
int &a; // Dedigimizde derlenmiyor.
a = c // :(
int& b = c; //Dememiz gerekiyor
Bu std::reference_wrapper icin ayni degil
int c;
std::reference_wrapper<int>a;
a = std::ref(c); //yuppi : )
Diyelimki pointerlardan kacinmak istiyorsun (benim durumum bu idi pointerdan olasi kacinma durumlarini tartismistik galiba) ve referenslari tercih ediyorsun.
ama su mumkun degil sebebi ise dolayli olarak yukarda belirtigimiz durum :
void foo(std::vector<int&> param):
bu gibi durumlarda std::ref yardimci oluyor ve ornegimdeki gibi referans kullanabiliyor oluyoruz.
void foo (std::vector<std::reference_wrapper> param )
Bu std::ref fonksiyonuda std::reference_wrapper donuyor kendisine verilen tur ile.
Erdemdem
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]