Добавление параметра шаблона в друзья

Невозможно добавить параметр шаблона в друзья, потому что стандарт запрещает это. Как тогда я могу получить то же самое?

Я хочу, чтобы тип был непригоден для использования вне объекта, которому он принадлежит. Почему это не имеет значения, но если вы действительно должны знать, я пытаюсь сформулировать набор умных указателей, которые решают проблему совместного использования принадлежащего ресурса. Таким образом, я хочу сделать что-то вроде этого, если бы это сработало:

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;
};

Таким образом, класс не может удерживать этот объект как член, если он не объявит себя владельцем, и если это достаточно глупо, чтобы выставить его как есть, будет невозможно использовать вне класса, будучи такой тупой.

7
задан Edward Strange 3 February 2011 в 20:27
поделиться