Рассмотрим класс с перегруженным унарным оператором & (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 &
, потому что это делает код более глючным и трудным для понимания.Или есть другие причины?