Рассмотрим класс с перегруженным унарным оператором и (Address-of). Пусть это будет class A
template <class C>
class A
{
public:
C * operator &()
{
return &data;
}
//...
private:
C data;
}
Теперь я хочу передать некоторой функции указатель типа A
, чтобы заполнить его data
. Назовем его f
void f(A * auto_containter)
{
//...
}
Но понятно, почему код ниже не работал (даже не компилировался). Это происходит потому, что вызывается перегруженный оператор.
A a;
f(&a);
Возникает вопрос:
Есть ли какой-либо синтаксис для передачи адреса от A
до f
? Если нет, то для меня очень странно, почему разрешено перегружать унарный operator &
, потому что он делает код более багги и его трудно понять. Или есть другие причины?