ISO C++ Właściwości
Ostatnio zmodyfikowano 2008-11-15 18:48
DejaVu |
» 2008-11-15 18:29:45 Temat przedyskutowałem z manfredem już na gg. Streszczenie rozmowy: Informacja o zagadnieniu, które manfred chce osiągnąć: http://en.wikipedia.org/wiki/Property_(programming). Fragment z wikipedii: Programming languages that support properties include Delphi/Free Pascal, Visual Basic, C#, D, eC, Objective C 2.0, Python and Vala. Some object-oriented languages, such as C++ and Java, don't support properties, and require the programmer to define a pair of accessor and mutator methods instead. |
Moja refleksja: Myślę, że Twoje rozumowanie - czyli zrobienie takich get'ów setów w C++ jest błędne, ponieważ jeśli mnie pamięć nie myli to Ty mówiłeś, że po co robić narzut 'operatory są wolne'. Aby Twój mechanizm miał sens musisz zaimplementować go ze złożonością O(1), żeby był 'wmiarę' sensowny w użyciu i jednocześnie ilość instrukcji w algorytmie O(1) powinna być stosunkowo mała aby stała przed O(1) była mała, inaczej program będzie tracił na wydajności w miejscach w których nie powinna taka sytuacja mieć miejsca. Myślę, że kolejne osoby, które będą podejmowały się podobnego zadania przemyślą to co zostało tutaj napisane i wyciągną jakieś wnioski dla własnego problemu albo postawią chociaż założenia jakie powinien spełniać tworzony mechanizm, czyli był faktycznie użyteczny i wydajny. Rozumiem co Manfred chce osiągnąć, też znam C# i rozumiem, że są tam mechanizmy bardzo ciekawe, jednak są one wbudowane w kompilator i niestety niektórych z nich nie da się przenieść do C++ w sposób efektywny albo wcale się nie da tego zrobić. |
|
manfred Temat założony przez niniejszego użytkownika |
ISO C++ Właściwości » 2008-11-13 18:37:42 Witam! Mam niemały problem z zaimplementowaniem właściwości w ISO C++. Totalnie nie wiem jak się za to zabrać. Jeżeli ktoś wie jak to zrobić lub (lepiej) ma kod, to proszę o odpowiedź. /edit: No niby coś tam mam, ale to nie jest to o co chodziło, ma duży narzut, niewygodnie się używa, ogólnie jest be. Jeżeli ktoś wie jak to rozbudować to proszę o pomoc. template < typename T, typename C > class __property { private: C * _class; void( C::* _set )( T ); T( C::* _get )( void ); __property( __property & ); __property & operator =( __property & ); public: __property( C * class_, T( C::* get_ )( void ), void( C::* set_ )( T ) ) : _class( class_ ) , _set( set_ ) , _get( get_ ) { } operator T() { return( _class->* _get )(); } __property & operator =( T val ) { ( _class->* _set )( val ); return * this; } }; |
|
manfred Temat założony przez niniejszego użytkownika |
» 2008-11-15 18:48:14 Więc pozostaje używać tego tylko we własnych projektach przez rozszerzenia Visuala, no trudno. Niezbyt to przenośne, ale jak się robi programy na własny użytek to wystarczy. EOT. |
|
« 1 » |