Bu, std::unique_ptr
'a özgü bir sorun değil - şablon sınıflarının şablon sınıfları, C++ 17'den önceki kuruculardan otomatik olarak çıkmaz. Bu nedenle, std::make_unique
, std::make_pair
ve std::make_tuple
gibi özellikler mevcuttur: bunlar, kazanı azaltmak için şablon işlevi bağımsız değişken indirimi'u kullanır.
C++ 17 size yazmak mümkün olacak: class template deduction için
auto foo2 = std::unique_ptr(new Foo());
teşekkürler - P0433R0 varsayarak std::unique_ptr
bir kesinti kılavuzunu tamamen ekleyen kabul edilir. bu tür varsa T*
aksi halde,
std::remove_reference<Deleter>::type::pointer
: std::unique_ptr
's constructor that takes a raw pointer aşağıdaki gibi tanımlanır pointer
tipi takma kullandığından
kesinti kılavuz gereklidir. NullablePointer
'u karşılamalıdır. pointer
gibi
Tipi adlar olmayan deducible bağlamlar, bu yüzden P0433R0 eklenmesini önermektedir: std::unique_ptr
için sınıf şablonu kesinti sağlayacak
template<class T> unique_ptr(T*)
-> unique_ptr<T, default_delete<T>>;
template<class T, class V> unique_ptr(T*, V)
-> unique_ptr<T, default_delete<T, V>>;
template<class U, class V> unique_ptr(U, V)
-> unique_ptr<typename pointer_traits<typename V::pointer>::element_type, V>;
.
'std :: make_unique' (C++ 14) kullanın, bu nedenle tekrarlama yok. – Jarod42