Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[C++] Funkcja lub metoda z nieznanymi argumentami

Ostatnio zmodyfikowano 2013-04-24 23:31
Autor Wiadomość
DejaVu
» 2013-04-24 23:19:20
Zamiast trzymać się rozwiązania wywiedzionego z języka C proponowałbym użyć rozwiązania dostarczonego wraz ze standardem C++11 :)
P-81141
crash
» 2013-04-24 23:20:00
Referencja referencją, podobnie wartość, nie zmienia to postaci rzeczy, że w powyższym kodzie funkcja o zmiennej liście argumentów jest zaimplementowana błędnie. Nawet jeśli skompilowany kod zadziała to zostanie zdjęty tylko jeden argument z listy, tutaj najlepiej byłoby użyć pętli zdejmującej argumenty.

Podejrzewam, że DejaVuVowi@ chodzi o listę inicjalizacyjną ;>
P-81142
DejaVu
» 2013-04-24 23:22:48
http://stackoverflow.com/questions/10044449/a-function-with-variable-number-of-arguments-with-known-types-the-c11-way

/edit:
http://www.cplusplus.com/articles/EhvU7k9E/

C/C++
void printf( const char * s ) {
    while( * s ) {
        if( * s == '%' && *++s != '%' )
             throw std::runtime_error( "invalid format string: missing arguments" );
       
        std::cout << * s++;
    }
}

template < typename T, typename...Args >
void printf( const char * s, const T & value, const Args &...args ) {
    while( * s ) {
        if( * s == '%' && *++s != '%' ) {
            std::cout << value;
            return printf( ++s, args...);
        }
        std::cout << * s++;
    }
    throw std::runtime_error( "extra arguments provided to printf" );
}
http://www.generic-programming.org/~dgregor/cpp/variadic-templates.html
http://en.wikipedia.org/wiki/Variadic_template
P-81143
crash
» 2013-04-24 23:31:23
Lista inicjalizacyjna wygląda świetnie, dużo lepiej niż variadic templates.

Gdy jednak (do tematu) chceta ściągać argumenty różnych typów, zmienna lista argumentów + boost::any (zmienną listę argumentów lubiłem nadużywać :) )
P-81144
1 « 2 »
Poprzednia strona Strona 2 z 2