[c++] operator -> overloading

Landstreicher

Соответствует ли данная программа стандарту C++?

struct M {
int field;
};

template <typename T> struct A {
T v;
T* operator -> { return &v; }
};

void f
{
A<A<M> > a;
int b;
b = a->field;
}

Мой компилятор (gcc version 4.1.2 20060901 (prerelease) (Debian 4.1.1-13 ее не ест.

okunek

Когда перегружаешь ->, он должен возвращать либо указатель, либо объект, у которого тоже есть перегруженный ->
> T &operator -> { return v; }
и еще в M:
> M *operator -> { return this; }
соглашусь с предыдущим оратором, с++ - говно

0000

http://www.gamedev.ru/flame/forum/?id=11530&page=151
На самом деле, было время когда я кодил на С++ и мне оно не понравилось, просто те ошибки, которые автор этой статьи нашёл через 15 лет я понял сразу и пересел, на что-нибудь ближе к человеческому мышлению, и при этом позволяющее писать гибкий код. Сперва это был асм, а потом Делфи+асм.

Missi4ka

Соответствует ли данная программа стандарту C++?
Имхо, не соответствует. Перегружать можно все операторы, кроме точки (обращение к полю структуры) и стрелочки, которая равносильна разименованию и взятию точки.

bobby

Стрелочку перегружать можно.

margadon

>Перегружать можно все операторы, кроме точки (обращение к полю структуры) и стрелочки
стрелку можно, а вот оператор "? :" нельзя, а так же нельзя "::" и ".*"
Оставить комментарий
Имя или ник:
Комментарий: