, ben makul kolayca initializer_list yapıcı yetki verebilir görünüyor , Örneğin.İsteğe belki sarma konteynerler
int main(int argc, char* argv[]) {
holder<std::vector<int>> y{1,2,3};
return EXIT_SUCCESS;
}
Ama oldukça açıkçası 'int' veya yuvalanmış value_type typedef yok başka türü olarak T için çalışmaz. Yani, her ikisi de iç içe değer bir değer_tip tipedef tanımlamaz ve std :: initializer_list yapılamazsa, initializer_list kurucusunun yayınlanmaması için bir tür enable_if veya benzer bir hile kullanmak isterim.
holder(typename std::enable_if<std::is_constructible<T, std::initializer_list<typename T::value_type>>::value, std::initializer_list<typename T::value_type>>::type values)
: t_(values) {}
Herhangi: derleyici (benim durumumda ++ 3.1 çınlama), hala T int geçersiz T :: VALUE_TYPE üzerinde gezileri, çünkü
ben yapmak istedim, ama yine de çalışmıyor "Bu şablona T'nin değer_sayısı üzerinde bir ilkleştirici listesi yapıcısını verin, eğer sadece T değeri bir değer_sayısı tipine sahipse ve T :: değeri_tipi olan bir initializer_list dosyasından yapılandıysa" ifadesini nasıl ifade edeceğine dair düşünceler.
'initializer_list' doğru değerle geçti, yoksa bazı referans türüne göre iletilmesi gereken var mı? ('&&'?) –
@MartinBa: değere geçmek std :: initializer_list' için doğru (ve önerilir). –
Bir 'initializer_list 'sadece bir işaretçi ve bir boyut içerir, bu yüzden bu değeri iletmek için tamam. Verilerin kendisi kopyalanmaz. –