Bir kaynağın kendisine verilen herhangi bir akıştan yüklenmesi için bir kurucu oluşturmaya çalışıyorum. İstream parametresini yapıcıya iletmenin en iyi yolunu anlayamıyorum.Bir std :: istream'i bir işlev içine nasıl geçerek geçici olarak geçmesine izin verebilirsiniz?
Loader::Loader(istream stream);
Bu, nesne dilimlemesinden dolayı kötüyse kötüdür, bu nedenle seçenek yoktur.
Loader::Loader(istream& stream);
Şimdi kullanıyorum ve oldukça iyi görünüyor. Bununla birlikte önemli bir sorun var - geçici olmayan bir referansa geçici olarak bağlanamazsınız çünkü geçici olmayan referanslara bağlanamazsınız! Örneğin, aşağıdaki çalışmaz: Ben şimdi sadece ömrünü uzatmak için konteynerin bir üyesi değişkeni olarak ifstream saklamak zorundayım çünkü
Container():
mLoader(ifstream("path/file.txt", ios::binary)
{
}
Bu bir sınırlama doğrusu olduğunu.
Loader::Loader(const istream& stream);
Ama vb .seek() olmayan const olduğundan, bu da bir seçenek değildir ...
: problem yana biri olsa bu olabilir, const olmayan referanslarla olduğunuPeki, bu problem nasıl düzgün bir şekilde çözülebilir?
'std :: istream' bir yerde mevcut olmalıdır. – Simple