jankustosz Temat założony przez niniejszego użytkownika  | 
Jak działa variadic function? » 2015-05-03 21:19:39 Witam opakowywuję allegro 5 w klasy i napotkałem jeden większy problem. Jest tam funkcja która działa podobnie do printf z biblioteki stdio. Muszę zrobić funkcję, która też zależnie od tekstu w pierwszym argumencie ma odpowiednią ilość kolejnych argumentów. Dowiedziałem się że nazywa się to variadic function. Znalazłem taką stronę http://en.cppreference.com/w/cpp/utility/variadic  Mógłby mi ktoś jaśniej objaśnić co i po co się robi? Kombinowałem na różne sposoby ale nigdy nie działa. Najlepiej żeby było to było to w c++ 11. Liczę na waszą pomoc.  | 
 | 
pekfos  | 
» 2015-05-03 21:50:56  | 
 | 
kubawal  | 
» 2015-05-04 12:47:44 Poczytaj o variadic templates.  | 
 | 
Fireho  | 
» 2015-05-04 19:12:56 Jak? Poprzez dopisanie na końcu listy argumentów  ... . Potem pobiera się argumenty kilkoma makrami  VA_START ,  VA_ARG  i  VA_END  (to metoda tradycyjna). Po co? Aby zapewnić możliwość podawania dowolnej ilość argumentów, np. do funkcji drukujących takich jak  printf . Obecnie powinieneś użyć czegoś co się zwie variadic templates(z C++11), wygoogluj. Nie jest to co prawda najprostsza rzecz, ale cóż...   | 
 | 
jankustosz Temat założony przez niniejszego użytkownika  | 
Nie rozumiem jednej rzeczy. » 2015-05-08 22:12:36 Ok. Wiem już jak to działa variadic function ale nic mi z tego, gdyż do funkcji printf muszę przekazać tekst + jeszcze tą nieznaną liczbę argumentów, a przecież nie da się przekazać do funkcji nieznanej liczby argumentów. Przecież nie zrobię tak:
  int ileproc(char* tekst) { 	int ile = 0; 	while (*tekst != NULL) 	{ 		if (*tekst == '%') 			ile++; 		tekst++; 	} 	return ile; }
 
  void napisz(const char *text, ...) {         int a = ileproc(text);         va_list vl;         va_start(vl, a);         printf(text, Nie da się przekazać nieznanej liczby argumentów jak to zrobić tak va_arg , czy może tak ...)         va_end(vl); }
  może ktoś ma jakiś pomysł  | 
 | 
pekfos  | 
» 2015-05-08 22:15:34 vprintf()..  | 
 | 
Gabes  | 
» 2015-05-08 23:21:38 #include <stdio.h> #include <stdarg.h>
 
  static void tekst( ALLEGRO_FONT * font, ALLEGRO_COLOR color, int x, int y, int flags, char const * format,...) {     va_list list;     char message[ 1024 ];     va_start( list, format );     vsnprintf( message, sizeof message, format, list );     va_end( list );          al_draw_text( font, color, x, y, 0, message ); } ...
  tekst( font, al_map_rgb( 0, 0, 0 ), 0, 0, 0, "%i %1.2f", a, b );  | 
 | 
Fireho  | 
» 2015-05-09 12:43:10 Używaj szablonów... przykład: template < typename...Argumenty > void napisz( const char * text, Argumenty...args ) {     printf( text, args...); }  | 
 | 
|  « 1 »  2 |