deklaruje funkcję przyjaciela szablonu klasy szablonu
Mam szablon klasyObj
i szablon funkcjimake_obj
. Obj
maprivate
zdefiniowany pojedynczy konstruktor, który odwołuje się do swojego typu szablonu, aby go powiązać.
template <typename T>
class Obj {
private:
T& t;
Obj(T& t)
: t{t}
{ }
};
template <typename T>
Obj<T> make_obj(T& t) {
return {t};
}
Chcę zadeklarowaćmake_obj
funkcja afriend
tak, aby mógł tworzyćObj
, ale nikt inny nie może (z wyjątkiem za pośrednictwem kopiarki).
Próbowałem kilku deklaracji przyjaciół, w tym
friend Obj make_obj(T&);
i
template <typename T1, typename T2>
friend Obj<T1> make_obj(T2&);
Ta ostatnia jest mniej niż pożądaną próbą utworzenia wszystkich instancji szablonówmake_obj
przyjacieleObj
klasa. Jednak w obu tych przypadkach pojawia się ten sam błąd:
error: calling a private constructor of class 'Obj<char const[6]>'
return {t};
^
note: in instantiation of function template specialization
'make_obj<const char *>' requested here
auto s = make_obj("hello");
^
próbuje zrobićmake_obj("hello");
na przykład.
Jak mogę tylko pozwolićmake_obj
dostęp doObj
konstruktor wartości?