Få pointers til at ligne C#-style

Tags:    c++ pointer syntaks

Hej Udviklere,

Dette problem hverken haster eller er på nogen måde nødvendigt, så jeg vil knap kalde det et problem. Seriøse, relevante svar sætter jeg dog stadig pris på!!

Alle der kender lidt til C/C++ ved, hvordan pointers skabes og, hvordan deres syntaks ser ud, altså fx.

int* pNum = &var;

Forestil dig nu, du har lavet din egen type:

class MyClass {
...
};

Når jeg nu vil lave en pointer af typen MyClass, er jeg nødt til at skrive noget i stil med:

MyClass* mcPtr = new MyClass();

i C# ville man istedet skrive:

MyClass mcPtr = new MyClass();

med andre ord ville man i C# udelade asterisken (*), der i C++ denoterer en pointer. Det er her, mit 'problem' opstår: jeg vil gerne kunne oprette pointers i C++, der følger C#'s syntaks, altså udelukkelsen af asterisken, så jeg i C++ kan skrive:

MyClass p = new MyClass();

Jeg har fundet et par 'løsninger', men jeg er ikke helt tilfreds med nogle af dem, hvorfor jeg spørger jeg til råds. Mine løsninger er disse:

1)
MyClass p = *new MyClass();

2)
#define PMyClass MyClass*
...
PMyClass p = new MyClass();

løsning 2 kunne også ordnes med nøgleordet typedef, men så står man jo stadig med to navne for samme type, og man vil stadig være tvunget til at definere/typedef'e for hver type, man opretter et objekt af.

En tredje løsning ville være noget á la:

#define PTR(t) t*
...
PTR(MyClass) p = new MyClass();

-------------

Flere kan jeg ikke komme på i øjeblikket. Er der et klogt hoved, der kan hjælpe mig her, eller er det simpelthen bare umuligt, da C++ har en anden syntaks end C#?

Venligst undlad at spørge, hvorfor jeg ønsker dette og ikke bare kan affinde mig med, at sådan er det og sådan ser C++'s syntaks ud. Jeg takker jeg alle mange gange på forhånd :-)


Vh Thomas



9 svar postet i denne tråd vises herunder
5 indlæg har modtaget i alt 20 karma
Sorter efter stemmer Sorter efter dato
Jeg forsøgte vist bare at sige at det ikke kan lade sig gøre i C++, fordi det ikke giver mening i C++. Du kan åbenbart ikke lide svaret, måske fordi du vil have C++ til at ligne C#, men det giver ikke mening, det er to forskellige sprog.



Min årsag er at gøre det tydeligt for alle læsere (ikke kun dig) at det er noget skidt, du har gang i. Diskussion er så'n set meningen med et forum, så du kan ikke frabede dig den slags kommentarer.

<sarkasme>
By the way...jeg ønsker ikke at nogen siger, at jeg tager fejl eller udtrykker uenighed med mit synspunkt!
</sarkasme>



Indlæg senest redigeret d. 24.01.2012 21:52 af Bruger #2695
Du kan vidst nok gøre det her:
Fold kodeboks ind/udC++ kode 

Men så laver den klassen på stakken og den er væk når du går ud af scopet i modsætning til C# hvor alle klasseinstanser bliver lavet på heapen.

Det er typisk ikke muligt at ændre på syntaksen i sprog, så det tættese du kommer er nok en af de "workarounds" du selv har nævnt.



Indlæg senest redigeret d. 24.01.2012 18:58 af Bruger #14645
Du kan ikke omdefinere en type til at være en pointer til sin egen type (hvis du forstår).

Mange bruger dog *Ptr, altså noget i stil med:
Fold kodeboks ind/udKode 




Jeg kan ikke finde på andre svar end at det er der bestemt ingen grund til at gøre, at det er et utidigt forsøg på at sløre hvad der foregår, men den slags kommentarer har du frabedt dig, så jeg vil holde min mund.



hehe...hvis Bertel tør, så tør jeg også :-)
Hvordan skal man kunne se, at 'MyClass blar' er en POINTER til et 'MyClass' objekt ?
Hvad er årsagen til, at du vil gøre koden ulæselig for programmører ?



Ikke for at lyde sur eller spydig, men hvad er årsagen til de sidste to kommentarer, når jeg eksplicit frabad dem? Hvad med vi bare siger, at årsagen er nysgerrighed, og så lader den ligge dér?



Robert, det er helt i orden, du ignorerer at jeg frabeder mig den slags kommentarer, når du har en grund så gyldig som den faktisk er; men jeg synes ikke du bør fortælle, hvad andres indlæg må eller ikke må indeholde, i mit tilfælde en frabedelse af kommentarer af en vis art; det er simpelthen ikke op til dig :-)

Anyway, jeg vil ikke fortsætte hvad der kunne ende i et mindre skænderi, så du er velkommen til at svare, men forvent ikke en respons :-)



Så omformulerer jeg: "Du kan ikke frabede dig den slags kommentarer og regne med at vi efterkommer dit ønske".
Er det bedre ?

Freedom of speech og den slags.



t