napisz o tym ksiazke :)
--
Marcin Ciećwierz
gar...@devil.inside.pin.pl
http://www.devil.inside.pin.pl/~gardner
:)
Och te skomplikowanie... Obecnie rogueliki sa proste, mimo, ze i tak duzo
bardziej skomplikowane niz takie np pożal sie Boże Diablo. Ale takie
skompilkowanie to jest to o co mi chodzi - fajnie przy tym uczyć sie
myślenia o obiektach na rougelikowych przykladach bo obiekty sa tak
obrazowe a akcje na nich jeszcze bardziej obrazowe.
Twoją wypowiedz rozumiem tak, że mówisz można robić to w c++ bo c++ robi
to automatycznie, ale ja mógłbym zrobic to ręcznie i za wszystko sam
odpowiedać, też jestem na to gotów
((
mogę tu wstawić wstawkę pro c:
w programistach c mogłaby
obudzic sie duma, coś w tym stylu "dobry kierowca nie używa
automatycznej skrzyni biegów" (to trochę żartem) - nie jest to wcale
tak trudne chyba jak może wydawać sie programistom w c++
Na przykład z tego zo zrozumiałem o vector<int>
wielokrotnie (!) szybciej niż mogę o tym przeczytać, mogę to
wymyślić - zanim mrugniesz okiem
typedef struct {
int ilosc;
int nr[1000]; //UWAGA limit!!
} structListaNumerow;
structListaNumerow V = {0, {}};
V.nr[ilosc]=a; V.ilosc++; // to odpowiada V.push_back(a) czy jak mu tam
if (V.ilosc>0) for (int i=0; i<V.ilosc; i++) {} // do omiata wektor
prosto, szybko i DOKLADNIE WIEM CO SIE DZIEJE
))
:) ale rozwiazania automatyczne też akceptuję - o ile są dobre -
nie wiem na razie jak to jest, nie znam c++, widze, ze tu na liscie
jest wiecej fanow c++
Cieszę się z wszystkich ewentualnych zalet obu jezykow.
fir
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
wiem :)
DO WSZYSTKICH ZAINTERESOWANYCH:
Doszukałem się w końcu takiego rozwiązania
#include <stdio.h>
struct structhumanoid_specyfic {char *przechowywane_mysli; } hum_doklejka[10];
struct structanimal_specyfic { int a;} animal_doklejka[10];
struct structdragon_specyfic {int d; int f;} dragon_doklejka[10];
struct structpostac {
int pozx;
int pozy;
enum {humanoid, animal, smok} typ;
union { // UNIĘ MOŻNA DAĆ BEZ NAZWY!
structhumanoid_specyfic *hum;
structanimal_specyfic *anim;
structdragon_specyfic *smo;
};
} postac[100];
////////////////////////////////////////////////////////////////////////////
void main() {
// Teraz mogę kazać humanoidowi przechowywać kawalek mojej szalonej filozofii
postac[32].hum->przechowywane_mysli = "Rzeczywistosc jest krolestwem jazni.
Wszechswiat"
" wypelniony jest radoscia, dlatego, ze jest wypelniony mozliwoscia. Musisz po
prostu"
" nauczyc sie podrozowac. Moja jazn podrozuje dzisiaj w rejony jezyka c ";
printf( postac[32].hum->przechowywane_mysli );
// smokom zaś mogę pozwolić "istnieć na różne sposoby"
}
// <Fir> do siebie: To jest właśnie potęga twojej wyobraźni <Fir>, coś
// nieznanego tym przypieprzaczom się bez głowy
Pytanie techniczne (teraz pow wyswietleniu tekstu wypisuje 'null pointer
assygment' dlaczego?)
<FIr>
widac kompilator nie ma tyle wyobrazni co Ty i czepia sie jakichs
glupich szczegolow technicznych. olej go! w koncu on jest dla Ciebie
czy Ty dla niego?
pzdr
szeryf
--
Przemysław Kowalczyk | sze...@negativeIQ.pl | gg#2307508 | icq#65884288
--::[ Cytat z Księgi Cytatów Experta :: http://xox.pl/~zamsz/ ]::--
Ale z drugiej strony to jak mowia, kto ma wladze nad usenetem ten ma
wladze na internetem, a kto ma wladze nad internetem ten rzadzi krajem.
FiR
Fir
> Jeżeli przekonał byś się choć troche do C++:) to mógłbys o zrobić tak:
> Deklarujesz klase bazową, która ma wszystko to co powinna miec, a następnie
> tworzysz nowe specyficzne klasy dziedziczące z bazowej. Teraz możesz
> w tablicy trzymać wskaźniki na klase bazową, a poszczególne elementy
> są alokowane już na odpowiednie klasy pochodne. I masz to wszystko z głowy.
>
> A jak byś chciał mieć to już zupełnie elegancko wo wrzucasz to wszystko
> do vector<> i masz obsługe pamięci z głowy i wszystko jest generyczne
> eleganckie i fajne:)
>
>
i automatyczne - Byc może rzeczywiscie przekonam sie do
tego pomysłu, poczytam o c++,
zobaczymy...
Fir
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Hehe, mylisz się i to bardzo. Twoja struktura ma ten minus że ma
ograniczenie
do 1000 elementów. Owszem możesz dać więcje ale po cholera przydzielać
pamięć na 1000000000 elementów jeżeli potrzebuj w tej chwili 2??
Kolejna sprawa, do vectora<> moge wstawić co tylko chce od inta
poprzez np. obrazek do cholera wie jeszcze czego. Tak więc Twoj
przykład potrafi zrobić ok tego 0.001% co można zrobić z vectorem:)
Tak więc nie jesteś w stanie w przeciągu mrugnięcia okiem zrobić
czegoś podobnego. Dodam, że w c nie jesteś w stanie praktycznie
w ogóle zrobić czegoś takiego jak vector<> (tzn. o podobnych mo-
żliwościach).
"prosto, szybko i DOKLADNIE WIEM CO SIE DZIEJE" to jest bardzo
niebezpieczne stwierdzenie:) Ciekawe gdzie są osoby które pare
lat temu używały takich stwierdzeń i programowały w assemblerze:)
Jednak główna zaletą c++ w stosunku do c to nie to że jest bardziej
elastyczny, czy też można coś zrobić szybciej dzięki lepszym
biblioteką. Ale to że wymusza on zupełnie inny sposób myślenia
dzięki czemu kod staje się bardziej przejrzysty.
Gwarantuje Ci, że za pare miesięcy jak zajrzysz do takiego kodu
to nie będziesz miał pojęcia co tam jest. A jeżeli bedzie to
kod pisany przez grupe maniaków c to już zupelnie współczuje.
A najfajniej jest jak trzeba poprawić coś w kodzi napisanym
przez maniaka c, który nawalił tam tysiące wskaźników do wskąźniów
wskazujących na tablice innych wskaźników które potem są rzutowane
na coś innego i wskazuja na jeszcze coś:))
Pozdrawiam Arek G.
----------------------------------------------------------------------
Codziennie poszukujesz wiadomosci? >>> http://link.interia.pl/f1633
--
Archiwum grupy: http://niusy.onet.pl/pl.comp.lang.c
Mam pewność, że w swoim zastosowaniu V nigdy nie przekroczy 1000
nie potrzebuje tracic czasu na sprawdzanie tego.
>
> Kolejna sprawa, do vectora<> moge wstawić co tylko chce od inta
> poprzez np. obrazek do cholera wie jeszcze czego. Tak więc Twoj
> przykład potrafi zrobić ok tego 0.001% co można zrobić z vectorem:)
Jasne tylko to jest to 0,001 którego potrzebuję, niczego wiecej
nie chce i nie chce tego obslugiwac
(a akurat mam takie zastosowanie tego, szukam przedmiotów znajdujacych
sie na mapie we współrzędnych x, y; funkcja ma zwracac wskaznik
do listy inna ma wyswietlic spis z tej listy; wszystko to b. proste
tablica i int wskazujacy jej zapelnienie zebrane wspolna nazwa)
> Tak więc nie jesteś w stanie w przeciągu mrugnięcia okiem zrobić
> czegoś podobnego. Dodam, że w c nie jesteś w stanie praktycznie
> w ogóle zrobić czegoś takiego jak vector<> (tzn. o podobnych mo-
> żliwościach).
>
> "prosto, szybko i DOKLADNIE WIEM CO SIE DZIEJE" to jest bardzo
> niebezpieczne stwierdzenie:) Ciekawe gdzie są osoby które pare
> lat temu używały takich stwierdzeń i programowały w assemblerze:)
>
>
> Jednak główna zaletą c++ w stosunku do c to nie to że jest bardziej
> elastyczny, czy też można coś zrobić szybciej dzięki lepszym
> biblioteką. Ale to że wymusza on zupełnie inny sposób myślenia
> dzięki czemu kod staje się bardziej przejrzysty.
>
> Gwarantuje Ci, że za pare miesięcy jak zajrzysz do takiego kodu
> to nie będziesz miał pojęcia co tam jest. A jeżeli bedzie to
> kod pisany przez grupe maniaków c to już zupelnie współczuje.
> A najfajniej jest jak trzeba poprawić coś w kodzi napisanym
> przez maniaka c, który nawalił tam tysiące wskaźników do wskąźniów
> wskazujących na tablice innych wskaźników które potem są rzutowane
> na coś innego i wskazuja na jeszcze coś:))
>
> Pozdrawiam Arek G.
>
Być może ale w c to nie jest wcale tak nieprzejrzyste, mam tablice
trzech podstawowych dla swojego programu struktur, opisujacej
postac, opisujacej przedmiot, opisujacej pole "kafelek" mapy
i sama mape[][] z numerami pol
'interfejsy' tych tablic wygladaja tak:
postac[i].nazwa
przedmiot[k].wlasciciel;
pole[j].jest_przezroczyste
To jakby wszystkie dane, którymi sie zajmuje
akcjom, funkcjom które na tym operuja tez nadaje czytelne nazwy
wszystko to jest zupelnie przejrzyste
<FiR>
>>>if (V.ilosc>0) for (int i=0; i<V.ilosc; i++) {} // do omiata wektor
Po co ten if?
>>>prosto, szybko i DOKLADNIE WIEM CO SIE DZIEJE
Chwilowo.. powodzenia w grzebaniu w tym za jakiś czas ;)
> Mam pewność, że w swoim zastosowaniu V nigdy nie przekroczy 1000
> nie potrzebuje tracic czasu na sprawdzanie tego.
Jasne jak słońce, zapewne autor funkcji gets też miewał tego typu pewności.
>>Kolejna sprawa, do vectora<> moge wstawić co tylko chce od inta
>>poprzez np. obrazek do cholera wie jeszcze czego. Tak więc Twoj
>>przykład potrafi zrobić ok tego 0.001% co można zrobić z vectorem:)
Masz szablonik, w sumie niewiele ponad tablice z C, działa na tej samej
zasadzie.
>>Tak więc nie jesteś w stanie w przeciągu mrugnięcia okiem zrobić
>>czegoś podobnego. Dodam, że w c nie jesteś w stanie praktycznie
>>w ogóle zrobić czegoś takiego jak vector<> (tzn. o podobnych mo-
>>żliwościach).
Na chama, z jakimiś rzutowaniami zrobiłby to.
>>"prosto, szybko i DOKLADNIE WIEM CO SIE DZIEJE" to jest bardzo
>>niebezpieczne stwierdzenie:) Ciekawe gdzie są osoby które pare
>>lat temu używały takich stwierdzeń i programowały w assemblerze:)
Zgadza się, tylko w C++ też niebardzo można tak mówić, bo łatwo napisać
molocha naszprycowanego STLem.
>>Jednak główna zaletą c++ w stosunku do c to nie to że jest bardziej
>>elastyczny, czy też można coś zrobić szybciej dzięki lepszym
>>biblioteką. Ale to że wymusza on zupełnie inny sposób myślenia
>>dzięki czemu kod staje się bardziej przejrzysty.
Za mało przejrzysty, za dużo zgodności z C.
> Być może ale w c to nie jest wcale tak nieprzejrzyste, mam tablice
> trzech podstawowych dla swojego programu struktur, opisujacej
> postac, opisujacej przedmiot, opisujacej pole "kafelek" mapy
> i sama mape[][] z numerami pol
>
> 'interfejsy' tych tablic wygladaja tak:
>
> postac[i].nazwa
> przedmiot[k].wlasciciel;
> pole[j].jest_przezroczyste
>
> To jakby wszystkie dane, którymi sie zajmuje
Za każdym razem kiedy używasz literki i, k, j musisz teoretycznie
sprawdzić czy nie przekroczyłeś zakresu.
> akcjom, funkcjom które na tym operuja tez nadaje czytelne nazwy
Czytelne nazwy to nie wszystko.
> wszystko to jest zupelnie przejrzyste
Jasne.. Jak sie zabieram do czytania dokumentacji jakichś starawych
bibliotek napisanych w C kilka(naście) lat temu, albo poprostu grzebie
czasem w jakichś źródełkach w nadziei na znalezienie _Wiedzy_ to odrazu
czuje niemoc twórczą i ogólne zwątpienie.
Najciekawszy jest OpenGL - niby prosta (w sensie prosta struktura)
bilioteka, szkoda tylko, że każda głupia funkcja przyjmuje liczby
poprzykrywne define'ami, a kompilator nie raczy powiadomić o ich błędnym
dobieraniu. Jeszcze lepsze jest gołe GTK+, wogóle nie wiem pod jaki styl
to podpiąć.
Kiedyś toczyłem zaciekłe boje z socketami w C i C++, najciekawsze jest
to, że w większość dokumnetacji jaką znalazłem przykłady były w tym
najbardziej porypanym C (funkcje zaczynają się od stada zmiennych, potem
nadawanie im wartości, potem wywoływanie kolejnych funkcji z kosmicznymi
rzutowaniami, jak to jest czytelne to jestem skończonym debilem).
Zajarzyłem o co w socketach chodzi dopiero w OCamlu (kompilator dzięki
statycznemu typowaniu nie pozwala na klasyczne byczki C - błędne
argumenty, pomylone typy, nie było też rozwlekłego syfiastego kodu).
--
Lucifer
To co teraz powiedziałeś, to daleko posunięta krótkowzroczność:(
>
> >
> > Kolejna sprawa, do vectora<> moge wstawić co tylko chce od inta
> > poprzez np. obrazek do cholera wie jeszcze czego. Tak więc Twoj
> > przykład potrafi zrobić ok tego 0.001% co można zrobić z vectorem:)
>
> Jasne tylko to jest to 0,001 którego potrzebuję, niczego wiecej
> nie chce i nie chce tego obslugiwac
>
To samo co powyżej.
> > Gwarantuje Ci, że za pare miesięcy jak zajrzysz do takiego kodu
> > to nie będziesz miał pojęcia co tam jest. A jeżeli bedzie to
> > kod pisany przez grupe maniaków c to już zupelnie współczuje.
> > A najfajniej jest jak trzeba poprawić coś w kodzi napisanym
> > przez maniaka c, który nawalił tam tysiące wskaźników do wskąźniów
> > wskazujących na tablice innych wskaźników które potem są rzutowane
> > na coś innego i wskazuja na jeszcze coś:))
> >
> > Pozdrawiam Arek G.
> >
>
> Być może ale w c to nie jest wcale tak nieprzejrzyste, mam tablice
> trzech podstawowych dla swojego programu struktur, opisujacej
> postac, opisujacej przedmiot, opisujacej pole "kafelek" mapy
> i sama mape[][] z numerami pol
>
>
>
Może źle Cie rozumiem, ale najwyraźniej nie masz doświadczenia z
bardziej rozbudowanymi aplikacjami, pisanymi przez różnych ludzi
o róznych przyzwyczajeniach (świadczą o tym Twoje powyższe argu-
menty)
Faktycznie do malych i prostch programików c może być. A jezeli
dalej nie chcesz wychodzić, no to faktycznie c.
Oczywiście, boże uchowaj mnie od konieczności rozumienia czyjegoś kodu
> o róznych przyzwyczajeniach (świadczą o tym Twoje powyższe argu-
> menty)
>
> Faktycznie do malych i prostch programików c może być. A jezeli
> dalej nie chcesz wychodzić, no to faktycznie c.
>
> Pozdrawiam Arek G.
>
>
Przy odrobinie szczęścia Bóg Cie oleje.
--
Lucifer
Dziwną frazę wytworzyłeś Lucifer: że przy odrobinie szczęścia 'cię oleje'
jakby troche obraźliwe, przez to 'oleje' i sugerowanie że nie wiem
co jest dla mnie szczęściem jakbym był głupi jak owca; w tym samym
'Cię' napisane z dużej litery - chyba ponadprzeciętna grzeczność;
do tego jeszcze w tym samym podniosłe 'Bóg' zestawione 'Bóg cię oleje'
--
:-/
:-)
> --
> Lucifer
f...@NOSPAM.poczta.gazeta.pl wrote:
>
> > >>Może źle Cie rozumiem, ale najwyraźniej nie masz doświadczenia z
> > >>bardziej rozbudowanymi aplikacjami, pisanymi przez różnych ludzi
> > >
> > >
> > > Oczywiście, boże uchowaj mnie od konieczności rozumienia czyjegoś kodu
> >
> > Przy odrobinie szczęścia Bóg Cie oleje.
> >
>
> Dziwną frazę wytworzyłeś Lucifer: że przy odrobinie szczęścia 'cię oleje'
> jakby troche obraźliwe, przez to 'oleje' i sugerowanie że nie wiem
> co jest dla mnie szczęściem jakbym był głupi jak owca; w tym samym
> 'Cię' napisane z dużej litery - chyba ponadprzeciętna grzeczność;
> do tego jeszcze w tym samym podniosłe 'Bóg' zestawione 'Bóg cię oleje'
>
> --
> :-/
>
> :-)
>
> > --
> > Lucifer
> >
Zacytuję Chimerycznego Lokatora(bez żadnej złośliwości):
"Przenieście bluzgi na priv, proszę Was."
Targacz
Tu nie ma nic obraźliwego, poprostu bardzo wątpię, żebyś nigdy nie
musiał poprawiać czyjejś pracy.
--
Lucifer
Pewnie. Wcale nie odebrałem tego jako obraźliwe
- wogole nie wiem o czym targacz mówi.
Targacz: rzuć okiem na mój przykalad z polem w strukturze które jest
unią wskaźników do struktur. Co na to powiesz? Dlaczego to generuje
błąd?
<Fr>
tomasz_k...@poczta.onet.pl wrote:
>
> > Użytkownik <tomasz_k...@poczta.onet.pl>:
> > > Pytanie techniczne (teraz pow wyswietleniu tekstu wypisuje 'null pointer
> > > assygment' dlaczego?)
> >
> > widac kompilator nie ma tyle wyobrazni co Ty i czepia sie jakichs
> > glupich szczegolow technicznych. olej go! w koncu on jest dla Ciebie
> > czy Ty dla niego?
> >
> Czy ktoś jednak wie dlaczego kompilator wyświetla taki błąd,
Nie kompilator. To błąd RunTime.
> rozwiazanie
> byloby idealne gdyby wyeliminować jeszcze tylko tą trudność.
musisz allokowac pamięć dla postac[32].hum, przecież to wskaźnik!
postac[32].hum=(structhumanoid_specyfic*)malloc(sizeof(structhumanoid_specyfic));
//...
free(postac[32].hum);
Targacz
Panie! Panie!
Tak bez pytania ?! :-)
Pozdrawiam!
Marcin
A to przepraszam, faktycznie źle Cie rozumiem myślałem, że jesteś
programistą. Jezeli nie to jesteś zupełnie usprawiedliwiony.
----------------------------------------------------------------------
Zawsze mozesz do mnie wrócić... >>> http://link.interia.pl/f1636
Co to jest "moloch naszprycowany STLem"? Jeżeli STLa jest dużo i jest
świadomie wykorzystywany, to program jest łatwo rozszerzalny, ma jasną
strukurę, jest wydajny. Sam mam z nim jak najlepsze doświadczenia... Może
poza przesadnym stosowaniem obiektów funkcyjnych - mimo wszystko łatwiej jest
napisać zwykłą pętlę 'for' niż tworzyć tworzyć nową klasę, rzadko kiedy można
wykorzystać więcej niż raz taki funktor (do tego dochodzi brak wsparcia języka
do tworzenia lokalnych struktur, nie mówiąc o dostępie do lokalnego
środowiska). No i brak kontroli "konceptów" wbudowanych w język (tzn.
określenia, że dany typ wspiera jakieś operacje, jak np. przypisanie) - czego
efektem kilobajtowe komuniakty błędów - w końcu kompilator zastępuje tylko
bezmyślnie parametry szablonu. Przydałby się jakiś inteligentniejszy model
polimorfizmu czasu kompilacji... (wystarczy spojrzeć na Haskella i jego "type
classes").
f...@poczta.gazeta.pl wrote:
>
> > Tu nie ma nic obraźliwego, poprostu bardzo wątpię, żebyś nigdy nie
> > musiał poprawiać czyjejś pracy.
> >
>
> Pewnie. Wcale nie odebrałem tego jako obraźliwe
> - wogole nie wiem o czym targacz mówi.
<TO>
>... i sugerowanie że nie wiem
> co jest dla mnie szczęściem jakbym był głupi jak owca; w tym samym
> 'Cię' napisane z dużej litery - chyba ponadprzeciętna grzeczność;
> do tego jeszcze w tym samym podniosłe 'Bóg'...
</TO>
To zabrzmało jak ironia, ale jak zwykle mi się zdawało...
Następnym razem nie będę się wtrącał.
> Targacz: rzuć okiem na mój przykalad z polem w strukturze które jest
> unią wskaźników do struktur. Co na to powiesz? Dlaczego to generuje
> błąd?
Targacz
Obadaj Boost, tam nie ma problemu z funktorami :)
--
Best regards from
Kamil Burzynski
Senior Design Engineer
Advanced Digital Broadcast Poland, LTD.
- -
"Yes, I'm criminal. My crime is that of curiosity."
Problemy, o których mówię (brak closures, lokalnych funktorów, lambda wyrażeń
(Boost.Lambda to zdecydowanie nie to)) pozostają.
> środowiska). No i brak kontroli "konceptów" wbudowanych w język (tzn.
> określenia, że dany typ wspiera jakieś operacje, jak np. przypisanie) - czego
> efektem kilobajtowe komuniakty błędów - w końcu kompilator zastępuje tylko
> bezmyślnie parametry szablonu. Przydałby się jakiś inteligentniejszy model
> polimorfizmu czasu kompilacji..
Co fakt to fakt :(
--
[/ Khorne <khornie@-poczta.onet.pl> : Everyone can observe survivors, but \]
[: Linux BOfH registered as 246296 : only wise can learn from them. :]
[\ ICQ #117289698 -=*http://leto.anet5.pl.eu.org*=- /]
Jeżeli przekonał byś się choć troche do C++:) to mógłbys o zrobić tak:
Deklarujesz klase bazową, która ma wszystko to co powinna miec, a następnie
tworzysz nowe specyficzne klasy dziedziczące z bazowej. Teraz możesz
w tablicy trzymać wskaźniki na klase bazową, a poszczególne elementy
są alokowane już na odpowiednie klasy pochodne. I masz to wszystko z głowy.
A jak byś chciał mieć to już zupełnie elegancko wo wrzucasz to wszystko
do vector<> i masz obsługe pamięci z głowy i wszystko jest generyczne
eleganckie i fajne:)
Życze milej zabawy Arek G.
----------------------------------------------------------------------
Zgodz sie, co Ci szkodzi? ;-) >>> http://link.interia.pl/f1634
Przeoczyłem, że należy zainicjowac wskaźnik np.
postac[32].hum=&hum_doklejka[3];
To wszystko. Podsumowujac - problem z doklejaniem struktur do struktur
zostal pozytywnie rozwiazany. Ale mam juz nastepny.
Fir
--
Wysłano z serwisu OnetNiusy: http://niusy.onet.pl
> No i oczywiscie moje pytanie: jak to zrobic? albo jak to zrobić lepiej?
>
> Fir
>
uzyj do tego vectora (#include <vector>).
maHo
> A jak byś chciał mieć to już zupełnie elegancko wo wrzucasz to wszystko
> do vector<> i masz obsługe pamięci z głowy
No, połowicznie: obiekty za tymi wskaźnikami trzeba jawnie zwalniać
(a przez wartość nie można wsadzać do vectora, jeśli mają różne typy).
--
__("< Marcin Kowalczyk
\__/ qrc...@knm.org.pl
^^ http://qrnik.knm.org.pl/~qrczak/
oto przetestowany/dzialajacy/kompletny przyklad:
#include <stdio.h>
enum Typ { ta, tb };
struct A { int l; };
struct B { double l; };
union U { struct A a; struct B b; };
struct T { int *t; union U *u; };
int main(void)
{
struct A a = { 0 };
struct B b = { 0.0 };
union U x = (union U) a;
union U y = (union U) b;
union U u[3] = { x, y, x };
int typ[3] = { ta, tb, ta };
struct T t = { typ, u };
int i;
for (i=0; i<3; i++)
{ if (t.t[i] == ta)
t.u[i].a.l = i;
if (t.t[i] == tb)
t.u[i].b.l = i+.1;
}
for (i=0; i<3; i++)
{ if (t.t[i] == ta)
printf("struktura A, i = %d\n",t.u[i].a.l);
if (t.t[i] == tb)
printf("struktura B, d = %f\n",t.u[i].b.l);
}
return 0;
}
wynik dzialania:
-----------------------
struktura A, i = 0
struktura B, d = 1.100000
struktura A, i = 2
ps. w ten/podobny sposob imho (nie testowalem) mozna implementowac podobne
przypadki w c++,
np. _tablice czegokolwiek_ sa mozliwe do zaimplementowania :DDD
aha: kompilator DJGPP, Win98se
pozdrowienia
ajkos
hm jesli chodzi o tablice czegokolwiek to mozna to zrobic troche
inaczej, bez uni ktore imho troche zaciemniaja sprawe
chociazby tak
struct data
{
void *data;
short type;
}
i wtedy mozesz spokojnie pod data zaalokowac sobie pamiec pod int, albo
pod char albo pod klase jakas
mozna tez zrobic klase z konstruktorami przyjmujacymi jako parametr albo
int, albo struct s1 albo struct s2
ja osobiscie nie lubie uzywac uni.
aha i do takich rzeczy to chyba mozna uzyc templatesy.. ale nie wiem bo
jakos nigdy ich nie potrzebowalem
Piotrek
pio...@ikaria.pl
A hierarchia klas i vector<KlasaBazowa> nie pogryzą się przypadkiem? ;)
Pewnie trzeba będzie zrobić jakiś myk, żeby uniknąć slicing'u, np.
vector< jakis_sprytny_wskaznik<KlasaBazowa> >
pozdrawiam,
tomek
--
.signature: Too many levels of symbolic links
Witam
Byc moze przyklad, ktory podaje nizej nie jest odpowiedni akurat do tego
konkretnego rozwiazania. Czesto uzywam podobnej skladni do pracy z bardziej
zlozonymi strukturami. W taki sposob moge uzyskac cos na wzor dziedziczenia
;-), funkcji virtualnych :-) itp. Oczywiscie funkcjonalnosc taka jest bardzo
ograniczona w porownaniu z c++, ale trzeba sobie jakos zycie ulatwiac.
typedef double (*WartoscFun)(void *_this);
typedef struct
{
WartoscFun Wartosc;
}Tbl;
typedef struct
{
WartoscFun Wartosc;
int i;
}A;
double A_Wartosc(A *_this){return _this->i;}
typedef struct
{
WartoscFun Wartosc;
float f;
}B;
double B_Wartosc(B *_this){return _this->f;}
typedef struct
{
WartoscFun Wartosc;
double d;
}C;
double C_Wartosc(C *_this){return _this->d;}
int main()
{
A a = {(WartoscFun)A_Wartosc,7};
B b = {(WartoscFun)B_Wartosc,.7};
C c = {(WartoscFun)C_Wartosc,.145};
Tbl *tbl[3] = { (Tbl*)&a, (Tbl*)&b, (Tbl*)&c};
int i;
for( i=0; i<3; i++ )
printf("%8.3f\n",tbl[i]->Wartosc(tbl[i]));
return 0;
}
Wynik dzialania:
7.000
0.700
0.145
--
pg
hi
>Wynik dzialania:
> 7.000
> 0.700
> 0.145
wlasnie, wynik jest _rozbiezny_ z zamierzeniami, konwersja robi swoje niestety.
pozdro
ajk
hej
> bez uni ktore imho troche zaciemniaja sprawe
w jaki sposob 'zaciemniaja' ?
>ja osobiscie nie lubie uzywac uni.
nie lubic, to mozna zupy ogorkowej :D
3maj siem
ajk