Article View: pl.comp.objects
Article #16852Re: Groovy
From: Seweryn Habdank-Wojewódzki
Date: Mon, 14 May 2007 14:53
Date: Mon, 14 May 2007 14:53
82 lines
3377 bytes
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-mailReferences:
<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