объявить функцию друга шаблона класса шаблона
У меня есть шаблон классаObj
и шаблон функции.make_obj
Obj
имеетprivate
Определен единственный конструктор, который принимает ссылку на свой шаблонный тип для привязки.
template
class Obj {
private:
T& t;
Obj(T& t)
: t{t}
{ }
};
template
Obj make_obj(T& t) {
return {t};
}
То, что я хочу, это объявитьmake_obj
функция аfriend
так что это может создатьObj
s, но никто другой не может (кроме как через копию ctor).
Я пробовал несколько объявлений друзей, в том числе
friend Obj make_obj(T&);
а также
template
friend Obj make_obj(T2&);
Последнее является менее желательной попыткой создания всех шаблонных экземпляровmake_obj
друзьяObj
учебный класс. Однако в обоих случаях я получаю одну и ту же ошибку:
error: calling a private constructor of class 'Obj'
return {t};
^
note: in instantiation of function template specialization
'make_obj' requested here
auto s = make_obj("hello");
^
пытаясь сделатьmake_obj("hello");
для примера.
Как я могу разрешить толькоmake_obj
доступ к 'Obj
S значение конструктора?