hallo,
ich schreibe zur Zeit ein Funktion die etwas in eine Logdatei schreiben soll. Das soll so ähnlich gehen wie bei sprintf, dass man einen Formatstring hat und dann eine unbegrenzte Anzahl Parameter. Ich habe mir jetzt gedacht, ich leite die Parameter einfach an sprintf weiter und lass dann von der Funktion den String erstellen, das ist aber garnicht so einfach. Ich kann anhand des Strings rausfinden wie viele Parameter übergeben wurden, theoretisch auch, welchen Typ die haben, aber dann könnte ich auch direkt sprintf selber schreiben... ich brauche irgendeinen anderen ansatz. Mich würde mal interessieren wie ihr sowas implementieren würdet. So siehst aus, ich weiß, dass das total ätzend und unschön ist, aber wills euch trotzdem mal eben zeigen, damit ihr seht welchen Ansatz ich versucht habe:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
//find the number of arguments
int ArgumentCount = 0;
for(int i=0;i<pMessage.size();i++)
{
if(pMessage[i] == '%') ArgumentCount++;
}
//compose string
char String[256];
va_list ArgumentList;
va_start(ArgumentList, ArgumentCount);
if(ArgumentCount == 0) sprintf_s(String, 256, pMessage.c_str());
if(ArgumentCount == 1) sprintf_s(String, 256, pMessage.c_str(), va_arg(ArgumentList, void*));
if(ArgumentCount == 2) sprintf_s(String, 256, pMessage.c_str(), va_arg(ArgumentList, void*), va_arg(ArgumentList, void*));
if(ArgumentCount == 3) sprintf_s(String, 256, pMessage.c_str(), va_arg(ArgumentList, void*), va_arg(ArgumentList, void*), va_arg(ArgumentList, void*));
va_end(ArgumentList);
|
das würde natürlich nur gehen, wenn ich den Zeiger auf void dereferenzieren könnte...