Re[3]: мысль
От: Atomic Max Россия  
Дата: 18.02.05 15:54
Оценка:
Здравствуйте, _Winnie, Вы писали:

_W>

_W>int main()
_W>{
_W>  std::cout <<sizeof(MegaClass) <<"\n"; //empty class

_W>  MegaClass mc;
_W>  mc.X() = 10;
_W>  int i = mc.Y();

_W>  std::string s = mc.Sss();
_W>  mc.Sss() = "world";

_W>  //проверяю в листинге на asm, что компилятор уничтожает лишние вызовы.
_W>  Test2 t;
_W>  t.I() = 10;
_W>  i = t.I();

_W>  std::cout <<i;
_W>}

_W>


Да, идея интересная. Только "свойство" превратилось из поля класса в метод, поэтому надо писать пустые скобки. Интересно, что раньше, реализуя "свойство" через поле данных, я перегружал оператор () так, чтобы он возвращал результат Get-метода. Таким образом у меня появлялась возможность вызывать константные методы оригинального поля данных объекта. Например:
  //...
  const PropT operator () () { return (owner .* Getter)(); }
  //...

Теперь же придётся писать два раза скобки, чтобы спросить у строки длину :
//...
  cout << "Length is " << ms.Sss()().length() << endl;
//...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.