/ / Jak wywołać make_shared lub make_unique z konstruktorem opartym na szablonach - c ++, szablony, c ++ 11, inteligentne wskaźniki, make-shared

Jak wywołać make_shared lub make_unique z szablonem Constructor - c ++, szablony, c ++ 11, smart-pointers, make-shared

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 № 1

Nie 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ć.