Невозможно добавить параметр шаблона в друзья, потому что стандарт запрещает это. Как тогда я могу получить то же самое?
Я хочу, чтобы тип был непригоден для использования вне объекта, которому он принадлежит. Почему это не имеет значения, но если вы действительно должны знать, я пытаюсь сформулировать набор умных указателей, которые решают проблему совместного использования принадлежащего ресурса. Таким образом, я хочу сделать что-то вроде этого, если бы это сработало:
template < typename T, typename Owner >
struct accessible_member
{
private:
accessible_member() : val(T()) {}
accessible_member(T const& t) : val(t) {}
operator T& () { return val; }
operator T const& () const { return val; }
member_ptr<T> operator & () { return member_ptr<T>(val); }
friend class Owner;
};
Таким образом, класс не может удерживать этот объект как член, если он не объявит себя владельцем, и если это достаточно глупо, чтобы выставить его как есть, будет невозможно использовать вне класса, будучи такой тупой.