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: 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. |
|
Monika90 |
» 2014-12-17 19:49:16 void f(std::initializer_list<bool>);
|
|
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: 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? |
|
michal11 |
» 2014-12-17 21:27:36 Wystarczy tak: f( { 1, 1, 1, 1, 1, 0, 0, 0 } );
|
|
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ę. |
|
Monika90 |
» 2014-12-17 21:48:38 Przeciąż tę funkcję, to będzie przyjmowała i tablicę, i initializer_list #include <initializer_list>
void f( const bool * ) { }
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. |
|
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. |
|
« 1 » |