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

[C++]Przekazywanie tymczasowej tablicy do funkcji?

Ostatnio zmodyfikowano 2014-12-17 21:57
Autor Wiadomość
Harrel
Temat założony przez niniejszego użytkownika
[C++]Przekazywanie tymczasowej tablicy do funkcji?
» 2014-12-17 19:33:57
Witam. Sprawa jest prosta - mam funkcję która jako parametr przyjmuje tablicę jednowymiarową ( void f(bool[]); ).
I tu moje pytanie - czy moge wywołać tę funkcję bez tworzenia specjalnie tablicy? (coś typu np. f({1,0,1,0,1});).
Oczywiście przy takim rozwiązaniu kompilator tego nie przepuszcza. Myślałem, że może uda mi się to zrobic za
pomocą rzutowania na tablice (chyba czegos takiego nawet nie ma?)(  f((bool[])({1,0,1,1}))  ), ale oczywiscie wyskakuje błąd typu - 'error: ISO C++ forbids casting to an array type 'bool []''.

Załóżmy, że muszę zrobić coś typu:
C/C++
f( { 1, 1, 1, 1, 1, 0, 0, 0 } );
f( { 1, 1, 1, 1, 1, 0, 0, 0 } );
f( { 0, 0, 1, 1, 1, 0, 0, 0 } );

f( { 1, 1, 1, 0, 0, 0, 1, 1 } );
f( { 1, 1, 1, 1, 1, 1, 1, 1 } );
f( { 1, 1, 1, 1, 1, 1, 1, 1 } );
f( { 0, 0, 1, 1, 1, 1, 1, 0 } );

f( { 1, 1, 1, 0, 0, 0, 1, 1 } );
f( { 1, 1, 1, 1, 1, 1, 1, 1 } );
f( { 1, 1, 1, 1, 1, 1, 1, 1 } );
f( { 0, 0, 1, 1, 1, 1, 1, 0 } );

f( { 1, 0, 0, 0, 0, 0, 1, 1 } );
f( { 1, 0, 0, 0, 1, 1, 1, 1 } );
f( { 1, 0, 0, 0, 1, 1, 1, 1 } );
f( { 0, 0, 0, 0, 1, 1, 1, 0 } );

Więc chciałbym uniknąć bezsensowanego tworzenia ~15 tablic.
P-123023
Monika90
» 2014-12-17 19:49:16
void f(std::initializer_list<bool>);

P-123027
Harrel
Temat założony przez niniejszego użytkownika
» 2014-12-17 20:31:46
Po krótkiej lekturze udało mi się stworzyć coś takiego:

C/C++
initializer_list < bool > lista = { 1, 1, 1, 1, 1, 0, 0, 0 };
f( lista.begin() );
lista = { 1, 1, 1, 1, 1, 0, 0, 0 };
f( lista.begin() );
lista = { 0, 0, 1, 1, 1, 0, 0, 0 };
f( lista.begin() );
itd.

Właściwie to chyba rozwiązuje mój problem, ale czy o to mniej więcej Ci chodziło, czy można to zrobić prościej?
P-123028
michal11
» 2014-12-17 21:27:36
Wystarczy tak:
C/C++
f( { 1, 1, 1, 1, 1, 0, 0, 0 } );
P-123031
Harrel
Temat założony przez niniejszego użytkownika
» 2014-12-17 21:38:04
Ale chcę zostać przy tym żeby funkcja przyjmowała jako argument tablicę, a nie listę.
P-123033
Monika90
» 2014-12-17 21:48:38
Przeciąż tę funkcję, to będzie przyjmowała i tablicę, i initializer_list
C/C++
#include <initializer_list>

void f( const bool * ) { } //twoja oryginalna funkcja

void f( std::initializer_list < bool > ls )
{
    f( ls.begin() );
}

int main()
{
    bool a[] = { 1, 1, 0, 1, 1, 1, 0 };
    f( a );
    f( { 0, 0, 0, 1, 1, 1 } );
}

__________________________________________________________________________________


initializer_list < bool > lista = { 1, 1, 1, 1, 1, 0, 0, 0 };
f( lista.begin() );
lista = { 1, 1, 1, 1, 1, 0, 0, 0 };
f( lista.begin() );
lista = { 0, 0, 1, 1, 1, 0, 0,
Moim zdaniem to ma niezdefiniowane zachowanie.
P-123036
Harrel
Temat założony przez niniejszego użytkownika
» 2014-12-17 21:57:48
Właśnie takiego rozwiązania oczekiwałem. Dzięki wielkie, teraz już wszystko jasne.
P-123039
« 1 »
  Strona 1 z 1