🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.objects
Article #16852

Re: Groovy

#16852
From: Seweryn Habdank-Wojewódzki
Date: Mon, 14 May 2007 14:53
82 lines
3377 bytes
Witam

Adam Karpierz wrote:

> MyClass.cpp
> ==========
> 
> #include <iostream>
> 
> class MyClass;
> void sposob1(MyClass& obj)
> {
>     class MyClass1
>     {
>         public:
>             MyClass1 ( int const i ) : i_(i) {}
>             int const getI() const { return i_; }
> 
>         public:
>             int i_;
>     };
> 
>     MyClass1& obj1 = (MyClass1&)obj;

Sam Pan jest sobie winny. Linia powyżej to jest hak z C.
Jak się grzebie pod maską, to nie dziwota, że panu coś nawala.
W C++ używa się słowa kluczowego static_cast<>.

>     obj1.i_ = 1;
> }
> 
> #define private public

No super. Za takie coś ludzie z pracy wylatują. Znowu żałosny przykład. A
sposób na to jest prosty:

grep -R "#define" | grep "private" > wylotka_z_pracy.txt

> #include "MyClass.hpp"
> #undef  private
> void sposob2(MyClass& obj)
> {
>     obj.i_ = 2;
> }
> 
> void sposob3(MyClass& obj)
> {
> #define OFFSET_OF(struc, field)
> ((size_t)((char*)&((struc*)0)->field))
> #define POINTER_OF(struc, obj, field)              ((char*)&(obj) +
> OFFSET_OF(struc, field))
> #define REFERENCE_OF(struc, obj, fieldtype, field)
> (*(fieldtype*)POINTER_OF(struc, obj, field))
> 
>     int& obj_i = REFERENCE_OF(MyClass, obj, int, i_);

Znowu jak grzebie Pan w wnętrznościach to co się Pan dziwi.
 
>     obj_i = 3;
> }
> PS: Prosze sprobowac zrobic to w Javie czy C#.
>        Zycze powodzenia.

Nie musi Pan życzyć powodzenia. Piotr Kobzda wyraźnie napisał, że jak Pan
poprosi się o lanie i pogrzebie w JNI (a Pan w swoich przykładach robi coś
dokładnie na tym poziomie), to Pan może wszystko zrobić.

W C# też jest komenda umożliwiająca grzebania we wnętrznościach.

Współczuję Panu, że tak Pan pisze programy.

>        Juz nawet w Pythonie jest bezpieczniej conieco.

Jasne. Jak mu podetnie się nogi rozgrzebując PyObject, to będzie też
piszczał. Na takie haki jak Pan napisał w żadnym języku, który daje opcje
grzebania nisko nie ma rady.

Pozdrawiam.

-- 
|\/\/|   Seweryn Habdank-Wojewódzki
 \/\/
Technical Details
Message-ID: <f29stj$ved$1@news.vectranet.pl>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.vectranet.pl!not-for-mail
References: <f1tdl6$2s4$1@inews.gazeta.pl><f1todc$8s5$1@inews.gazeta.pl> <f1tss8$iq3$1@inews.gazeta.pl> <f1u2qu$1pm$1@inews.gazeta.pl> <1178922714.630317.141500@y80g2000hsf.googlegroups.com> <f22v79$3gu$1@inews.gazeta.pl> <f246sk$b8s$1@news.vectranet.pl> <f24i4s$6pe$1@inews.gazeta.pl> <f24s89$vs3$1@news.vectranet.pl> <f24u05$nnf$1@inews.gazeta.pl> <f24uor$39e$1@news.vectranet.pl> <f2586r$asf$1@inews.gazeta.pl> <f26fc9$iu6$1@news.vectranet.pl> <f287ie$354$1@inews.gazeta.pl> <f298ag$b63$1@news.vectranet.pl> <f29mdl$m5f$1@inews.gazeta.pl>

Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.vectranet.pl!not-for-mail
From: Seweryn Habdank-Wojewódzki <shw_mail@wp.pl>
Newsgroups: pl.comp.objects
Subject: Re: Groovy
Date: Mon, 14 May 2007 16:53:18 +0200
Organization: VectraNET - http://www.vectranet.pl
Lines: 83
Message-ID: <f29stj$ved$1@news.vectranet.pl>
References: <f1tdl6$2s4$1@inews.gazeta.pl><f1todc$8s5$1@inews.gazeta.pl> <f1tss8$iq3$1@inews.gazeta.pl> <f1u2qu$1pm$1@inews.gazeta.pl> <1178922714.630317.141500@y80g2000hsf.googlegroups.com> <f22v79$3gu$1@inews.gazeta.pl> <f246sk$b8s$1@news.vectranet.pl> <f24i4s$6pe$1@inews.gazeta.pl> <f24s89$vs3$1@news.vectranet.pl> <f24u05$nnf$1@inews.gazeta.pl> <f24uor$39e$1@news.vectranet.pl> <f2586r$asf$1@inews.gazeta.pl> <f26fc9$iu6$1@news.vectranet.pl> <f287ie$354$1@inews.gazeta.pl> <f298ag$b63$1@news.vectranet.pl> <f29mdl$m5f$1@inews.gazeta.pl>
Reply-To: shw_mail@wp.pl
NNTP-Posting-Host: 82.139.21.12
Mime-Version: 1.0
X-Trace: news.vectranet.pl 1179154163 32205 82.139.21.12 (14 May 2007 14:49:23 GMT)
X-Complaints-To: usenet@news.vectranet.pl
NNTP-Posting-Date: Mon, 14 May 2007 14:49:23 +0000 (UTC)
User-Agent: KNode/0.10.4
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit