Jak mogę zadzwonić make_shared
lub make_unique
w klasie, która ma konstruktora na podstawie szablonu? Oto przykład:
class A
{
/// constructor shared ptr
A(shared_ptr<X> x) ...
/// constructor that creates new shared ptr
template <class T> A() : A(make_shared<T>(...)) {}
};
make_shared<A<T>>()
nie ma sensu (ani nie kompiluje się), ponieważ byłoby to raczej dla klasy z szablonem, a nie dla konstruktora opartego na szablonie.
Ani make_shared<A><T>()
ani make_shared<A>(<T>())
kompilować --- ani nie wyglądać tak, jak powinny. Jak wyżej make_shared<A, T>()
Czy istnieje sposób określenia szablonu dla wywołania konstruktora w wywołaniu make_shared
? Zakładam, że odpowiedź miałaby zastosowanie make_unique
; jeśli tak nie jest, zaznacz to. Dzięki!
(Aby wyjaśnić, jak działa szablon, zredagowałem kod).
Odpowiedzi:
5 dla odpowiedzi № 1Nie ma możliwości użycia szablonu konstruktora klas w ogóle bez odliczenia argumentów szablonu. Dlatego wszelkie parametry szablonu należy wywnioskować z podanych argumentów, a nigdy nie podawać ich jawnie podczas rozmowy.
To nie jest ograniczone do żadnego z make_*
Funkcje; nie jest to w ogóle sposób na zainicjowanie obiektu. Tego konstruktora nie można wywołać. Twój kompilator nie musi narzekać na ten konstruktor, ale po prostu nie ma sposobu, aby go wywołać.