játékfejlesztés.hu
FórumGarázsprojectekCikkekSegédletekJf.hu versenyekKapcsolatokEgyebek
Legaktívabb fórumozók:
Asylum:    5512
FZoli:    4894
Kuz:    4455
gaborlabor:    4449
kicsy:    4304
TPG:    3402
monostoria:    3284
DMG:    3172
HomeGnome:    2919
Matzi:    2529

Pretender:    2498
szeki:    2440
Seeting:    2306
Geri:    2198
Orphy:    1893
Joga:    1791
Bacce:    1783
MaNiAc:    1735
ddbwo:    1654
syam:    1491
Korábbi postok
> 1 < [2] [3] [4] [5] [6] [7] [8] [9] [10] [15] [20] [25] [30] [35] [40] [45] [50] [55] [60] [65] [70] [75] [80] [85] [90] [95] [100] [105] [110] [115] [120] [125] [130] [135] [140] [143]
syam - Törzstag | 1491 hsz       Online status #130010   2010.03.31 15:28 GMT+1 óra  
Idézet
Plusz referenciák használatával megszabadulhatunk az ilyen bonyolult és érthetelen operátoroktól mint az & meg a -> meg a *.



(Úgy vettem észre, hogy) még gyorsítani is tud ha bonyolult a kifejezés értem ezalatt:
Kód:
cica[i].mica[j].nyávogás[k]

Ha ezt többször meghívódik egy blokkon belül, akkor az rengeteg "felesleges" memóriában történő ugrálás. Az animációt számoló kódomban érzékeltem 5-10%os gyorsulást tőle.
Azt viszont nem mértem le, hogy sima pointerrel mi történt volna
alias aalberik
   
Asylum - Törzstag | 5512 hsz       Online status #130007   2010.03.31 14:54 GMT+1 óra  
Köhém...

referencia: azért jobb, mert gyakorlatilag olyan, hogy nullreferencia, nem létezik (ilyen szempontból a C#-os ref inkább pointer), vagyis sokkal biztonságosabb, bár limitáltabb. Amit már korábban is említettem aza kifejezésre állított referencia, az az átláthatóságot is növeli. Plusz referenciák használatával megszabadulhatunk az ilyen bonyolult és érthetelen operátoroktól mint az & meg a -> meg a *.

C++0x: amiröl beszélsz az a jobbérték-referencia, ezt is már mondtam, hogy mire jó. Például nézzük a mátrixösszeadást

Kód:
e = a + b + c + d;


Ebböl valami ilyesmi lesz futási időben:

Kód:
tmp1 = a + b;
tmp2 = tmp1 + c;
tmp3 = tmp2 + d;
e = tmp3;

// 3 db temp változó


Mennyivel egyszerűbb lenne így:

Kód:
matrix&& tmp = a + b;
tmp += c;
tmp += d;
e = tmp;
// 1 db temp változó



template-ek: nagyon jó oka van ennek a szintaxisnak, többek között az új feature, a conceptek miatt is. De van egy értelmesebb oka is, a template metaprogramming...erről isvolt már szó...

Kód:
template <signed a, signed b>
class gcd
{
public:
    enum { Value = gcd<b, a % b>::Value };
};

template <signed a>
class gcd<a, 0>
{
public:
    enum { Value = a };
};

int main()
{
    std::cout << gcd<1240, 3460>::Value << "\n";
    return 0;
}



polimorfizmus: csak pointerrel? aha...:

Kód:
class A
{
public:
    virtual void foo() {
        std::cout << "A::foo()\n";
    }
};

class B : public A
{
public:
    void foo() {
        std::cout << "B::foo()\n";
    }
};

int main()
{
    B b;
    A& a = b; // ez a polimorfizmus

    a.foo(); // ez a dinamikus kötés
    return 0;
}

Ezt a hozzászólást Asylum módosította (2010.03.31 15:01 GMT+1 óra, ---)
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Pretten - Tag | 74 hsz       Online status #130002   2010.03.31 13:50 GMT+1 óra  
Idézet
Seeting :
Igaz, hogy a C++ eléggé egy őskövület, de performanceben és lehetőségek terén még mindig ez a legjobb


Nem feltétlenül. Ahogy bonyoódik a program egyre több alrendszer, egyre több homlokzat stb egyre lassabb lesz és jobban oda kell figyelni, hogy legalább ugyanazt a sebességet hozza, mint egy framework, ami másutt már rendelkezésre áll. A másik a memória kezelés, amit szintén meg kell oldani, ha nem akarod, hogy szétfragmentálja, vagy szervernél szétleakelje. Inkább a platformfüggetlenség ahol jobb, mindenüt van C++ fordító.
   
Seeting - Törzstag | 2306 hsz       Online status #130000   2010.03.31 13:01 GMT+1 óra  
Igaz, hogy a C++ eléggé egy őskövület, de performanceben és lehetőségek terén még mindig ez a legjobb
   
Pretten - Tag | 74 hsz       Online status #129998   2010.03.31 12:10 GMT+1 óra  
Polimorf viselkedést csak pointerrel lehet megvalósítani, meg igazából az való a dinamikus memória kezelésre. A referencia az csak egy újabb feature, egy hivatkozás valamire statikusan. Ami más nyelvekben van az valahol a kettő közötti valami.

Ez volt a C++ 2003, most meg van ez a C++0x, ami már 2009-es, vagy 2010-es. Ebben már asszem van mégegy fajta referencia, hogy legyen mit összekeverni. Meg lambda kifejezés, meg minden zutyulék, amit a C#-ból, java-ból, egyéb helyekről összeraktak. Támogathaná az egyszerűbb generikus megadást is ennyi erővel: class Valami<T> {}; mennyivel jobb, mint ez: template<typename T> class Valami {};
   
Joga - Törzstag | 1791 hsz       Online status #129982   2010.03.30 21:46 GMT+1 óra  
Hát, a pointerrel lehet aritmetikázni, a referenciát meg könnyen / átláthatóan lehet kezelni
( pointer aritmetika nélkül elég nehéz lenne tömböt kezelni )
(ಠ ›ಠ) Stewie!

   
bit.0x8000 - Törzstag | 574 hsz       Online status #129981   2010.03.30 21:36 GMT+1 óra  
Idézet
glezmen :
Idézet
bit.0x8000 :
1. A második megközelítés c++ szemszögből mennyire szép/gagyi?



c++ -ban inkabb 'szep' (const) referenciakat atadni pointerek helyett, bar ez igazabol izles (meg pl. C-s eloelet ) dolga


Őszintén szólva nekem kicsit fura, hogy mi a ráknak egy nyelvbe pointer meg referencia típus is?
(Persze, például a C "kompatibilitás" miatt. De én valahogy úgy érzem, hogy a c++ nem annyira nehéz, mint inkább öntörvényű nyelv. Persze ez szigorúan csak az én személyes véleményem. )

szerk: Az igazsághoz persze az is hozzátartozik, hogy a c++ nem egy mai gyerek, tehát igazságtalan lenne az újabb nyelvekhez hasonlítani. Viszont szerintem még a sima C is jóval "egységesebb".
Persze ez megintcsak az én személyes véleményem.
   
glezmen - Törzstag | 381 hsz       Online status #129980   2010.03.30 21:19 GMT+1 óra  
Idézet
bit.0x8000 :
1. A második megközelítés c++ szemszögből mennyire szép/gagyi?



c++ -ban inkabb 'szep' (const) referenciakat atadni pointerek helyett, bar ez igazabol izles (meg pl. C-s eloelet ) dolga
   
bit.0x8000 - Törzstag | 574 hsz       Online status #129979   2010.03.30 21:18 GMT+1 óra  
Idézet
Asylum :
Nem túl szerencsés a nullvektort a heapen lefoglalni (nehogymár mindig mikor használni akarom a dinamikus memóriaterülethez kelljen nyulkálni).


Ezt kifejthetnéd (nem kötözködni akarok, csak érdekelne).

Idézet
Asylum :
Egyébként ez a const * const nekem új...miben különbözik ez a const * -tól?


A "const *" egy konstansra mutató pointer: A pointeren keresztül nem tudod módosítani, viszont magát a pointert módosíthatod (tehát a ZERO_2D-be tudnál másolni más konstansokat, például mondjuk a UNIT_2D-t).
(A tévedés jogát fenntartom!)

Idézet
Asylum :
A megoldásodat meg nem értem (pontosabban azt nem értem, hogy mi szükség erre....).


Ennek roppant objektív és tudományos oka van: Így áll kézre...
   
glezmen - Törzstag | 381 hsz       Online status #129978   2010.03.30 21:09 GMT+1 óra  
"Egyébként ez a const * const nekem új...miben különbözik ez a const * -tól?"

a 'const' jelentheti azt, hogy a pointer altal mutatott memoriateruletet nem valtoztathatod meg, vagy hogy maga a pointer (vagyis hogy hova mutat) valtoz(tathat)atlan, a const * const X eseteben mindketto igaz
   
Asylum - Törzstag | 5512 hsz       Online status #129976   2010.03.30 21:02 GMT+1 óra  
Nem túl szerencsés a nullvektort a heapen lefoglalni (nehogymár mindig mikor használni akarom a dinamikus memóriaterülethez kelljen nyulkálni).

Plusz: a Java az Java. A C++ az C++...a kettőt ne keverd....

Nálam a következöképpen néz ki:

Kód:
class qVector2
{
public:
    // ...

    static const qVector2 Zero;
};

const qVector2 qVector2::Zero(0, 0);


A headerben ezt nem lehet sajnos megadni mert csak integral típusuakat lehet.
Egyébként ez a const * const nekem új...miben különbözik ez a const * -tól?

A megoldásodat meg nem értem (pontosabban azt nem értem, hogy mi szükség erre....). Szóval a válasz lényegében az, hogy "ezt ne"...
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
bit.0x8000 - Törzstag | 574 hsz       Online status #129970   2010.03.30 20:20 GMT+1 óra  
Egy érdekes probléma:
Tegyük fel, úgy akarom megírni a programomat, hogy azt viszonylag egyszerűen át lehessen írni java-ba is. Ez általában véve nem problémás, viszont a konstansoknál van "némi" különbség.
Gondolom egyértelmű, hogy az alábbi sornak mi a célja:
Kód:
const Vector2D *const ZERO_2D = new Vector2D(0.0F, 0.0F);

A java-ban viszont csak "final" módosító van, ami c++-ban a következőnek felel meg:
Kód:
Vector2D *const ZERO_2D = new Vector2D(0.0F, 0.0F);

Persze van megoldás:
Kód:
class Const2D
{   private :
        float x, y;

    public :
        inline const float &GetX();
        inline const float &GetY();
}

class Vector2D : public Const2D
{   public :
        inline void SetX(const float &x);
        inline void SetY(const float &y);
}

Const2D *const ZERO_2D = new Const2D(0.0F, 0.0F);

Ha mindkét megoldáshoz létrehozunk függvényeket és változókat, konstansokat:
Kód:
//első eset
void Draw(const Vector2D *vector);
void Change(Vector2D *vector);

const Vector2D *const ZERO_2D = new Vector2D(0.0F, 0.0F);
Vector2D *vector2D = new Vector2D(0.0F, 0.0F);

//második eset
void Draw(Const2D *vector);
void Change(Vector2D *vector);

Const2D *const ZERO_2D = new Const2D(0.0F, 0.0F);
Vector2D *vector2D = new Vector2D(0.0F, 0.0F);

Akkor az alábbi kód mindkét esetben működik (elméletben persze ):
Kód:
Draw(ZERO_2D);
Draw(vector2D);
Change(vector2D);

Két kérdésem van:
1. A második megközelítés c++ szemszögből mennyire szép/gagyi?
2. Teljesítmény szempontjából lehet számottevő különbség a két megoldás között?

Ezt a hozzászólást bit.0x8000 módosította (2010.03.30 20:47 GMT+1 óra, ---)
   
Matzi - Szerkesztő | 2529 hsz       Online status #129947   2010.03.30 11:43 GMT+1 óra  
Ha nem sajnálod a memóriát, akkor csinálsz rá egy hashtáblát, vagy akár kettőt az o1, o2-re. Nyilván kicsit trükközni kell, de ha a keresés gyakoribb, mint a módosítás, akkor jól jársz vele.
If your game idea starts with the story it’s not a game idea.
Stories in games are optional.
   
Asylum - Törzstag | 5512 hsz       Online status #129937   2010.03.29 22:32 GMT+1 óra  
Este van...roszul olvastam a feladatot.
De attól még nem lehet hatékonyabban.

Ezt a hozzászólást Asylum módosította (2010.03.29 23:23 GMT+1 óra, ---)
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
proof88 - Törzstag | 530 hsz       Online status #129936   2010.03.29 22:31 GMT+1 óra  
az h alapból rendezve szúrod be az elemeket
   
Asylum - Törzstag | 5512 hsz       Online status #129935   2010.03.29 22:30 GMT+1 óra  
Sajnos a multiset mégse lesz jó...gondolkozom.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
dvorgaz - Törzstag | 576 hsz       Online status #129933   2010.03.29 22:14 GMT+1 óra  
Konkrétan az érdekelne, hogy van-e annál hatékonyabb megoldás egy adott objectet tartalmazó elemek kikeresésére, mint hogy végig megyek az egészen és megnézem szerepel-e benne:
Kód:
list pairsContainingObj;
CollisisonObject* obj;

foreach(collisionpair pair in pairlist){
    if(pair.o1 == obj || pair.o2 == obj)
             pairsContainingObj.push_back(pair);
}
   
Asylum - Törzstag | 5512 hsz       Online status #129931   2010.03.29 22:04 GMT+1 óra  

Ezt a hozzászólást Asylum módosította (2010.03.29 22:31 GMT+1 óra, ---)
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
dvorgaz - Törzstag | 576 hsz       Online status #129926   2010.03.29 20:56 GMT+1 óra  
Van egy ilyenem, hogy:
Kód:
struct CollisionPair
{
CCollisionObject* o1;
CCollisionObject* o2;

CollisionPair(void) : o1(0), o2(0) {}
CollisionPair(CCollisionObject* a, CCollisionObject* b) : o1(a), o2(b) {}
};

És ezeket össze kellene gyűjteni egy listába, amin majd egyrészt végig kell iterálni, másrészt kéne egy olyan funkció, hogy ki tudjam gyűjteni a listából az összes olyan párt, ami tartalmaz egy adott CCollisionObject-et (ez lehet az o1, de akár az o2 is). Mi lenne erre a legmegfelelőbb adatszerkezet vagy stl konténer?
   
Seeting - Törzstag | 2306 hsz       Online status #129893   2010.03.29 11:39 GMT+1 óra  
Még egy off: Nem kell ahhoz Goo-t írni, hogy úgyérezd továbbállhatsz a 2D-ről, vagy beleszagolj a 3D-be. Ez technológiai kérdés nem pedig designeri/játék minőségi.
   
Wolfee - Törzstag | 1337 hsz       Online status #129888   2010.03.29 11:03 GMT+1 óra  
kezd ilyen filozófikus teadélután szaga lenni a topiknak...
FZoli jóváhagyásával XD

   
Seeting - Törzstag | 2306 hsz       Online status #129887   2010.03.29 10:53 GMT+1 óra  
Tényleg nem tud semmit amúgy, de ez azért van mert nagyon api közeli. Na de tényleg hagyjuk abba az offolást.
   
MaximumViolence - Törzstag | 1020 hsz       Online status #129886   2010.03.29 08:08 GMT+1 óra  
Ez egy reszeg post...

   
Asylum - Törzstag | 5512 hsz       Online status #129884   2010.03.29 06:42 GMT+1 óra  
Már csak az a kérdésem, hogy ennek mi köze a C++ -hoz?
Meg különbenis XNA-t emlegetni a C++ topicban illetlenség
Letisztult: ami kvázi nem tud semmit azt könnyü letisztultra megírni Mielőtt megsértődsz, az XNA-ra gondoltam. Mielőtt az XNA-sok megsértődnek, igen az XNA-ra gondoltam
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Seeting - Törzstag | 2306 hsz       Online status #129883   2010.03.29 04:00 GMT+1 óra  
Idézet
bit.0x8000 :
Mint például a "World of Goo", a "Braid", a "Plants vs. Zombies", vagy a "Defense Grid" ?
Persze ez szemét kérdés volt.



Yes. This one is under developement, and will be released this summer.
   
bit.0x8000 - Törzstag | 574 hsz       Online status #129882   2010.03.29 03:52 GMT+1 óra  
Idézet
Seeting :
Idézet
bit.0x8000 :
Biztos hogy túl vagytok rajta?



Idézet
Seeting :
Mire gondolsz ezalatt? Csináltam már játékot 2D-ben is 3D-ben is.


Mint például a "World of Goo", a "Braid", a "Plants vs. Zombies", vagy a "Defense Grid" ?
Persze ez szemét kérdés volt.

Idézet
Seeting :
Egyébként is az, hogy mennyire élvezetes egy játék sosem múlt és nem is múlik a technológián...


Ebben látod, teljesen igazat adok neked...
   
Seeting - Törzstag | 2306 hsz       Online status #129881   2010.03.29 03:37 GMT+1 óra  
Idézet
bit.0x8000 :
Biztos hogy túl vagytok rajta?



Mire gondolsz ezalatt? Csináltam már játékot 2D-ben is 3D-ben is.

Egyébként is az, hogy mennyire élvezetes egy játék sosem múlt és nem is múlik a technológián...

Ezt a hozzászólást Seeting módosította (2010.03.29 03:45 GMT+1 óra, ---)
   
bit.0x8000 - Törzstag | 574 hsz       Online status #129880   2010.03.29 03:29 GMT+1 óra  
A 2D-n már túl vagyunk...

Idézet
bit.0x8000 :
Én személy szerint annak is örülök, ha SDL/OpenGL alatt egy 2D játékot összehozok...



Biztos hogy túl vagytok rajta?

Jaj, most ezt muszáj idelinkelnem (előre is elnézést kérek):
koan
   
Seeting - Törzstag | 2306 hsz       Online status #129879   2010.03.29 03:20 GMT+1 óra  
Idézet
bit.0x8000 :
Én személy szerint annak is örülök, ha SDL/OpenGL alatt egy jó 2D játékot összehozok...



A 2D-n már túl vagyunk... Az engine-em jelenleg ilyen tulajdonságokkal bír:

- Eseménykezelés
- Solid mesh generálás
- 3DS és saját model formátum importálása
- Effect manager (Fények, Basic effect per-pixel lighting-al, ez ki lesz bővítve postfx-szel)
- Texture mapping (mipmapping)
- Könnyen kezelhető scripter interface (Model, Effect és kamera osztályok kezelése; betölteni egy ppx-es textúrázott modellt és mozgatni alig 5-6 hívás)
- A drawMethod() és a logic szeparálva hívódik meg, az engine számolja hogy mikor szükséges mint az XNA-ban
- Stereo3D Quadbufferes kártyákon

- Meg egy rakás dolog még hátra van (animációk, bullet integrálása, stb...)
   
bit.0x8000 - Törzstag | 574 hsz       Online status #129878   2010.03.29 03:11 GMT+1 óra  
Idézet
Seeting :
3D, OpenGL a renderer.



Ha 3D-t akarsz, akkor szerintem nézned kéne egy már működő engine-t (Ogre 3D például)...
De ott van az OpenSceneGraph is (meg még elég sok dolog)...

Én személy szerint annak is örülök, ha SDL/OpenGL alatt egy jó 2D játékot összehozok...
   
Seeting - Törzstag | 2306 hsz       Online status #129877   2010.03.29 03:06 GMT+1 óra  
3D, OpenGL a renderer.
   
bit.0x8000 - Törzstag | 574 hsz       Online status #129876   2010.03.29 03:02 GMT+1 óra  
Idézet
Seeting :
A jelenlegi játékomat XNA-val írom, a címe Rotor és valamikor nyáron fog megjelenni. Az engine egyelőre csak experimental okok miatt készül, de ha kész lesz onnantól már nem fogok XNA-zni, sem pedig DarkGDK-zni.



Úgy értettem, hogy milyen grafikát (2D, 3D) gondoltál?
   
Seeting - Törzstag | 2306 hsz       Online status #129875   2010.03.29 02:55 GMT+1 óra  
A jelenlegi játékomat XNA-val írom, a címe Rotor és valamikor nyáron fog megjelenni. Az engine egyelőre csak experimental okok miatt készül, de ha kész lesz onnantól már nem fogok XNA-zni, sem pedig DarkGDK-zni.
   
bit.0x8000 - Törzstag | 574 hsz       Online status #129874   2010.03.29 02:45 GMT+1 óra  
Idézet
Seeting :
Tetszik az XNA letisztultsága és valami ilyesmit akarok elérni a saját enginemben is.



Lehet tudni, milyen játékra készül az az "engine" ?
   
Seeting - Törzstag | 2306 hsz       Online status #129873   2010.03.29 02:30 GMT+1 óra  
Nekem végülis megfelel a statikus osztály is így már. Csak arra kell, hogy valami összefogja az adott témába tartozó függvényeket. Tetszik az XNA letisztultsága és valami ilyesmit akarok elérni a saját enginemben is.
   
bit.0x8000 - Törzstag | 574 hsz       Online status #129872   2010.03.29 02:18 GMT+1 óra  
Idézet
gaborlabor :
Szerintem is singleton amit Seeting írt. És nagyon jól tudjuk, hogy az nem ugyanaz mint a statikus osztály.



Kivéve Asylum-ot, kár hogy mi (srácok ) nagyon el vagyunk tévedve.
(Ennél jobb flémet nem tudok szolgáltatni.)

Azé' písz...

szerk: Olvassátok vissza Asy' üzenetét, anélkül elég fura a hozzászólás.
   
gaborlabor - Moderátor | 4449 hsz       Online status #129871   2010.03.29 02:11 GMT+1 óra  
Szerintem is singleton amit Seeting írt. És nagyon jól tudjuk, hogy az nem ugyanaz mint a statikus osztály.

   
bit.0x8000 - Törzstag | 574 hsz       Online status #129868   2010.03.29 01:48 GMT+1 óra  
Idézet
Asylum :
Srácok ti nagyon el vagytok tévedve...a singleton kibaszottul nem ugyanaz mint a statikus osztály...
Ha valami azt akarod, hogy ne lehessen létrehozni, tedd priváttá a konstruktorát...


Idézet
Seeting:
Hogy lehet olyat csinálni, hogy van egy osztályom és leszármaztatok belőle egyetlen nagy globális példányt, amit akárhonnan elérhetek?


Ez eléggé singleton-nak hangzik. (Persze más kérdés, ha hülyeséget írt Seeting, de ezt inkább vele flémeld meg.)

szerk: A poén az, hogy én kifejezetten sok statikus osztályt használok.

Idézet
Asylum :
A háromféle jelölésnek pedig megvan a logikája...


Vitatta ezt valaki?
   
Asylum - Törzstag | 5512 hsz       Online status #129866   2010.03.29 01:39 GMT+1 óra  
Srácok ti nagyon el vagytok tévedve...a singleton kibaszottul nem ugyanaz mint a statikus osztály...
Ha valami azt akarod, hogy ne lehessen létrehozni, tedd priváttá a konstruktorát...

Az meg nem iterátor, hanem OPERÁTOR....
A háromféle jelölésnek pedig megvan a logikája (a -> valójában ekvivalens a (*). -al, tehát az el is hagyható akár).
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
bit.0x8000 - Törzstag | 574 hsz       Online status #129865   2010.03.29 01:31 GMT+1 óra  
Idézet
gaborlabor :
...másrészt meg csak akkor jön létre az ojjektum...


Szalacsy++
   
bit.0x8000 - Törzstag | 574 hsz       Online status #129864   2010.03.29 01:28 GMT+1 óra  
Idézet
Seeting :
Bár az XNA-ban nem scope iterátor van hanem pont: MathHelper.CreateLookAt();



A C++-ban meg "." vagy "->" vagy "::", ott ahol a C#-ban "."
Isten hozott.

Idézet
Seeting :
Szerk.: Mi az a singleton?


"Singleton pattern", guglizd be...
   
gaborlabor - Moderátor | 4449 hsz       Online status #129863   2010.03.29 01:26 GMT+1 óra  
Többféle singleton pattern van, nekem ez a kedvencem, mert egyrészt nem kell a destruktor miatt aggódni, lefut, másrészt meg csak akkor jön létre az ojjektum, amikor legelőször használni akarod. Bárhonnan elérheted a tagfüggvényeket cSingleton::Instance()-szel...

Kód:
class cSingleton
{
private :
// konstruktorok elrejtése
cSingleton(void);
cSingleton(const cSingleton &s) { }

// = operátor elrejtése
cSingleton &operator=(const cSingleton&);

public :
// destruktor
~cSingleton()
{
...;
}

// példány lekérése
static cSingleton &Instance(void)
{
static cSingleton S;
return S;
}
};


Guglizz arra hogy singleton design pattern. Amit fentebb leírtam, erről én asszem valamelyik game programming gems-ben olvastam, de van vagy 3-4 féle...

   
Seeting - Törzstag | 2306 hsz       Online status #129859   2010.03.29 01:21 GMT+1 óra  
Nem tudtam, hogy nem muszáj példányosítani, köszi!

Bár az XNA-ban nem scope iterátor van hanem pont: MathHelper.CreateLookAt();

Szerk.: Mi az a singleton?
   
bit.0x8000 - Törzstag | 574 hsz       Online status #129858   2010.03.29 01:20 GMT+1 óra  
Idézet
Seeting :
Hogy lehet olyat csinálni, hogy van egy osztályom és leszármaztatok belőle egyetlen nagy globális példányt, amit akárhonnan elérhetek?



Asylum példája, singleton mintával kiegészítve...
   
Asylum - Törzstag | 5512 hsz       Online status #129857   2010.03.29 01:12 GMT+1 óra  
Kód:
class Alma : public Gyumolcs
{
public:
    static void Megesz() { .. };
    static int Meret() const { return 10; }
};


Alma::Megesz();
std::cout << Alma::Meret() << "\n";
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
Seeting - Törzstag | 2306 hsz       Online status #129855   2010.03.29 00:51 GMT+1 óra  
Hogy lehet olyat csinálni, hogy van egy osztályom és leszármaztatok belőle egyetlen nagy globális példányt, amit akárhonnan elérhetek?

Arra gondolok mint a C# & XNA kombó-ban a MathHelper. Az nem egy osztály, hanem már egy példány, és bárhonnan el tudom érni.

Az extern nem pont erre jó?
   
Asylum - Törzstag | 5512 hsz       Online status #129698   2010.03.25 18:07 GMT+1 óra  
Ez meg miféle szintaktika? Igy kellene...

Kód:
Mapmenu *Mapmenu::instance;


Amit te irtál az member függvény pointereknél használatos szintaxis.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
bit.0x8000 - Törzstag | 574 hsz       Online status #129682   2010.03.25 13:52 GMT+1 óra  
Úgy tűnik, megvan a hiba oka, bár így elsőre nem teljesen világos, hogy mi a baja vele...

Szóval az eredeti MapMenu.cpp:
Kód:
MapMenu MapMenu::instances[INSTANCES], MapMenu::*instance;


Ha átírom így:
Kód:
MapMenu MapMenu::instances[INSTANCES];
MapMenu MapMenu::*instance;


...akkor nem dob hibát rá...

szerk: Közben rájöttem, hogy rossz helyen volt a kiscsillag, de azért így is elég fura a hibaüzenet...

Ezt a hozzászólást bit.0x8000 módosította (2010.03.25 18:31 GMT+1 óra, ---)
   
Asylum - Törzstag | 5512 hsz       Online status #129665   2010.03.24 21:30 GMT+1 óra  
Hát pedig csak ez lehet a hiba. Nézd át mégegyszer a kódodat.
C++ fordítóval és macival alszom
http://darthasylum.blog.hu/
   
bit.0x8000 - Törzstag | 574 hsz       Online status #129661   2010.03.24 21:14 GMT+1 óra  
Idézet
Asylum :
Ha minősítve van az osztály nevével akkor nem. Én inkább arra gondolok, hogy valahol van egy ilyen:

Kód:
A a;
a.instances[0] = 5; // error 'instances' is private




Az idézett két sorra dobta a hibát, pontosabban az elsőre, a másodikra meg olyat, hogy "within this context"...
   
Korábbi postok
> 1 < [2] [3] [4] [5] [6] [7] [8] [9] [10] [15] [20] [25] [30] [35] [40] [45] [50] [55] [60] [65] [70] [75] [80] [85] [90] [95] [100] [105] [110] [115] [120] [125] [130] [135] [140] [143]