Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

neido

Treue Seele

  • »neido« ist der Autor dieses Themas

Beiträge: 225

Wohnort: Wien

  • Private Nachricht senden

1

06.01.2008, 14:07

Funktionrückgabewerte

ich möchte eine Funktion schreiben, die einen string einliest und dann entweder einen Zeiger auf ein Objekt oder einen Integer zurückliefert. Man weis vorher aber nicht, welches von beiden zurückgeliefert wird.

Das Ganze soll eine einfache Scriptsprache für eine Schach-KI werden.

Wie realisiere ich das, mit Templates vielleicht? Aber da müsste man ja schon vorher den Typ wissen

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

2

06.01.2008, 14:10

http://de.wikipedia.org/wiki/Abstrakte_Fabrik
"Don't trust your eyes: They are a hell of a lot smarter than you are"

p0llux

Treue Seele

Beiträge: 101

Wohnort: Aachen

Beruf: HiWi (theo. Inf.)

  • Private Nachricht senden

3

06.01.2008, 14:47

Alternativ kannst du unions verwenden, oder Rückgabewerte über Parameter aus der Funktion nach aussen geben, statt über den Rückgabewert. Für Sowas ist 'ne Factory glaub' ich ein bischen viel:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
void foo(string text, int* value, void** pointer)
{
 ...
 // Integer zurückgeben.
 *value = 42;
 *pointer = 0;
 return;

 ...
 // Objekt zurückgeben.
 *pointer = ein_object;
 return;
}


Je nachdem, ob der pointer nachher gleich 0 ist oder nicht, weißt du dann ob ein objekt oder ein integer zurückgegeben wurde. Das void** solltest du dann aber auch direkt durch den entsprechenden Objekttypen ersetzen, z.B. Schachbrett** oder so.

neido

Treue Seele

  • »neido« ist der Autor dieses Themas

Beiträge: 225

Wohnort: Wien

  • Private Nachricht senden

4

06.01.2008, 16:04

sorry, ich vergaß zu erwähnen, dass ich c++ verwende

@ChrisJ: Diese Abstrakte Fabrik is mir etwas zu abstrakt :?

@P0llux: Ah Danke, die Lösung ist ja so einfach! Da hätt ich ja auch selbst draufkommen können, wenn ich nur ein bissi nachgedacht hätte. ich hab halt viel zu kompliziert gedacht. Mit unions hab ich halt noch nie gearbeitet, hab aber schon davon gehört, die 2. Lösung ist genau das was ich brauch.
nur eine Frage: Warum ist bei void** pointer ein Zeiger auf einen Zeiger? oder hat ** was anderes zu bedeuten?

TrommlBomml

Community-Fossil

Beiträge: 2 117

Wohnort: Berlin

Beruf: Software-Entwickler

  • Private Nachricht senden

5

06.01.2008, 16:09

jup das ist ein zeioger auf einen zeiger. das hat den sinn, dasss man speicher belegen kann innerhalb der fkt und dass dieser zeiger durch call by value nicht verloren geht. hätte man auch mit referenz zeiger machen können, ist an der stelle geschmackssache.

neido

Treue Seele

  • »neido« ist der Autor dieses Themas

Beiträge: 225

Wohnort: Wien

  • Private Nachricht senden

6

06.01.2008, 17:05

Da hab ich wohl eine große Lücke :oops: wieso geht der Zeiger auf einen Speicherbereich verloren, wenn man ihn durch call by value aufruft und warum hilft dann ein Doppelzeiger.

Zitat von »"TrommlBomml"«

"Man kann zu laut Musik hören, aber nicht Metal!"

da kann ich dir nur zustimmen

7

06.01.2008, 17:10

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
typedef int* int_t;

// int_t

void foo(int_t const&);
void foo(int_t&);
void foo(int_t);
void foo(int_t*);
// std::size_t 

void foo(std::size_t const&);
void foo(std::size_t&);
void foo(std::size_t);
void foo(std::size_t*);
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

neido

Treue Seele

  • »neido« ist der Autor dieses Themas

Beiträge: 225

Wohnort: Wien

  • Private Nachricht senden

8

06.01.2008, 17:34

@Deviloper: Okay, ich verstehe zwar die Syntax aber was genau sollen diese Funktionen jetzt bedeuten und auf welche Frage sind sie die Antwort?

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

9

06.01.2008, 17:52

Zitat von »"neido"«

Zitat von »"TrommlBomml"«

"Man kann zu laut Musik hören, aber nicht Metal!"

da kann ich dir nur zustimmen


dann seid ihr euch also einig, dass metal keine musik ist xD

neido

Treue Seele

  • »neido« ist der Autor dieses Themas

Beiträge: 225

Wohnort: Wien

  • Private Nachricht senden

10

06.01.2008, 18:00

@dot: ganz genau, Metal ist weit mehr als Musik :badgrin: aber is das jez nicht eher offtopic?

Werbeanzeige