Template mit Default Parameter mit Default Initialiserung in C++

Hi,
d.h. wenn ich z.B. irgendwo meiner Funktion abc 4 Variable übergebe, dann muss ich diese 4 Variablen nur deiner func übergeben oder?
z.B:
abc(CString var1,CString var2,int var3;float var4)

wie würde das dann aussehen?

Danke dass du so geduldig mit mir bist ;-)

Gruss
 
Hi,
d.h. wenn ich z.B. irgendwo meiner Funktion abc 4 Variable übergebe, dann muss ich diese 4 Variablen nur deiner func übergeben oder?
Die Funktion func würde im Grunde direkt deiner Funktion abc entsprechen.

Du mußt nur in der Hilfsklasse statt std::string dann CString verwenden und die Ausgabefunktion / den Ausgabeoperator anpassen.

Gruß
 
Die Funktion func würde im Grunde direkt deiner Funktion abc entsprechen.

Du mußt nur in der Hilfsklasse statt std::string dann CString verwenden und die Ausgabefunktion / den Ausgabeoperator anpassen.

Gruß

Hi,
danke für deine Geduld und deine Mühe.
Kannst du mir vielleicht anhand eines Beispiels das mal demonstriren?
Ich habe z.B.
void abc(CString var1, CString var2, CString var3, CString var4, CString var5, CString var6, CString var7);
aber auch an einer anderen Stelle:
void abc(CString var1, int var2, CString var3, int var4);
var1 kann ich ja immer fest als CString vorgeben.
Ausgabe wäre dann sowas wie:
str.Format("%s\t%s\t%i\t%s\t%i\t%s\t%i\t%s\t%i\t%f\t%s\t%i\t%s\t%i\t%s\t%i\r\n",var1, var2, var3, var4,var5,var6,var7);
wobei ja nicht jede Variable vorkommen kann.

Hilft das was?

Grüsse
 
Zuletzt bearbeitet:
Hi,
danke für deine Geduld und deine Mühe.
Kannst du mir vielleicht anhand eines Beispiels das mal demonstriren?
Ich habe z.B.
void abc(CString var1, CString var2, CString var3, CString var4, CString var5, CString var6, CString var7);
aber auch an einer anderen Stelle:
void abc(CString var1, int var2, CString var3, int var4);
var1 kann ich ja immer fest als CString vorgeben.
Ausgabe wäre dann sowas wie:
str.Format("%s\t%s\t%i\t%s\t%i\t%s\t%i\t%s\t%i\t%f\t%s\t%i\t%s\t%i\t%s\t%i\r\n",var1, var2, var3, var4,var5,var6,var7);
wobei ja nicht jede Variable vorkommen kann.
C++:
CString formatParam(const Param& p) {
  CString res;

  switch(p.type) {
  case Param::t_int:
    res.Format("\t%i", p.i);
    return res;

  case Param::t_float:
    res.Format("\t%f", p.i);
    return res;
 
  case Param::t_string:
    return ('\t' + p.str);
 
  default:
    throw std::logic_error("unknown type value");
  }
}

void abc(CString var1, Param var2 = Param(0), Param var3 = Param(0), Param var4 = Param(0), Param var5 = Param(0), Param var6 = Param(0), Param var7 = Param(0)) {
  CString str(var1);

  str += formatParam(var2) + formatParam(var3) + formatParam(var4) +
     formatParam(var5) + formatParam(var6) + formatParam(var7);

  ...
}
Gruß

PS: Die Funktion formatParam muss natürlich als friend deklariert werden. Oder man könnte sie eigentlich noch besser als Methode der Param Klasse definieren.
 
Zuletzt bearbeitet:
Du meinst dann so:
class Param {
public:
enum Type { t_int, t_float, t_CString };
private:
Type type;
union {
int i;
float f;
};

};
Param::formatParam(const Param& p)
{
CString res;
switch(p.type) {
case Param::t_int:
res.Format("\t%i", p.i);
return res;
case Param::t_float:
res.Format("\t%f", p.i);
return res;
case Param::t_string:
return ('\t' + p.str);
default:
throw std::logic_error("unknown type value");
}
}
ich denke mal deine .... stehen für den Rest am Code oder?

Grüsse
 
wo liegt mein Denkfehler?
ich habe für die Parameterbestimmung eine Klasse Param.cpp mit Param.h gemacht:
Param.cpp:
CParam::CParam(void)
{
}

CParam::~CParam(void)
{
}

CString Param::format(const Param& p) {
CString res;
switch (type) {
case Param::t_int:
res.Format("\t%i", p.i);
return res;
case Param::t_float:
res.Format("\t%f", p.i);
return res;
case Param::t_string:
return ('\t' + p.str);
default:
throw std::logic_error("unknown type value");
}
}

Param.h:
class CParam {
CParam(void);
~CParam(void);
public:
enum Type { t_int, t_float, t_CString };
private:
Type type;
union {
int i;
float f;
};
void format();
};

das ist mein Hauptprogramm:
Header:
void abc(CString var1, CParam var2 = CParam(0), CParam var3 = CParam(0), CParam var4 = CParam(0), CParam var5 = CParam(0), CParam var6 = CParam(0), CParam var7 = CParam(0));
komisch hier schon, ist wenn ich auf CParam gehe, dass nur vor var... auch angezeigt wird dass CParam eine Klasse ist, das CParam(0) nicht.
wenn ich das Programm kompiliere, dann kommt Fehler, dass keine Konvertierung erfolgen kann.

mensch bin ich blöd oder was?
 
Zuletzt bearbeitet:
komisch hier schon, ist wenn ich auf CParam gehe, dass nur vor var... auch angezeigt wird dass CParam eine Klasse ist, das CParam(0) nicht.
wenn ich das Programm kompiliere, dann kommt Fehler, dass keine Konvertierung erfolgen kann.
Deine Klasse kann nicht instanziert werden, da du den Standardkonstruktor als "private" deklariert hast und zudem auch keine anderen Konstruktoren definiert hast...

Den Code von oben abzuschreiben kann doch nicht so schwer sein, oder?! :confused:

Gruß

PS: Und bitte schau dir an was Code Tags sind und wie man sie verwendet!
 
Deine Klasse kann nicht instanziert werden, da du den Standardkonstruktor als "private" deklariert hast und zudem auch keine anderen Konstruktoren definiert hast...

Den Code von oben abzuschreiben kann doch nicht so schwer sein, oder?! :confused:

Gruß

PS: Und bitte schau dir an was Code Tags sind und wie man sie verwendet!

Hi,
Sorry aber mittlererweile komm ich etwas durcheinander was ich jetzt für class Param nehmen muss und was nicht ;-)

Gruss
 

Neue Beiträge

Zurück