corpo di inizializzazione degli array come parametro di funzione (array C), è possibile?

corpo di inizializzazione degli array come parametro di funzione (array C), è possibile?


Sto cercando un aiuto nella prossima situazione:

Ho una classe e un metodo, la sintassi è così:


class SomeClass {  
public:
void doSomething(int *a);
};

Quindi voglio chiamare questo metodo come


SomeClass::doSomething({ 0, 1, 2, 3, 4 });

È possibile in qualsiasi lingua?
Qualsiasi implementazione (C++, C, obj-c, obj-c++) è benvenuta!
So che questo blocco di inizializzazione è un corpo di array, come


int *a = { 0, 1, 2, 3, 4 };
SomeClass::doSomething(a);

Ma l'interfaccia avrà un bell'aspetto, penso, se non ci saranno variabili temporanee prima delle chiamate di funzione (poiché non è necessario conoscere il tipo di parametro in class-client). Quindi, c'è qualche possibilità di farlo?


Chiesto daart-divin

Risposte:


Si tratta di elenchi di inizializzatori C++11 (sezione 18.9).


void foo (std :: initializer_list <int> inputs) {
for (auto i : inputs) {
// ...
}
}
foo ({10, 20, 30});

Solo il compilatore può creare un elenco di inizializzatori, ma puoi trattarlo come un contenitore in stile STL standard con begin() , end() , size() e iteratori ad accesso casuale.


std::vector (e mi aspetto altri contenitori) ora possono essere costruiti con elenchi di inizializzatori, quindi


std :: vector <std :: string> foo {"a", "b"};

è equivalente a


std :: vector <std :: string> foo;
foo .push_back ("a");
foo .push_back ("b");

tranne per il fatto che può eseguire meno allocazioni. Nota che il const char* sono stati trasformati in std::string automaticamente.