In C++ 11 puoi. Una nota in anticipo: non lo new
array, non ce n'è bisogno.
Primo, string[] strArray
è un errore di sintassi, che dovrebbe essere string* strArray
o string strArray[]
. E presumo che sia solo per l'esempio che non passi alcun parametro di dimensione.
#include <string>
void foo(std::string* strArray, unsigned size){
// do stuff...
}
template<class T>
using alias = T;
int main(){
foo(alias<std::string[]>{"hi", "there"}, 2);
}
Nota che sarebbe stato meglio se non hai bisogno di passare la dimensione della matrice come un parametro in più, e per fortuna c'è un modo: modelli!
template<unsigned N>
void foo(int const (&arr)[N]){
// ...
}
Si noti che questo corrisponderà solo gli array di stack, come int x[5] = ...
. O quelli temporanei, creati dall'uso di alias
sopra.
int main(){
foo(alias<int[]>{1, 2, 3});
}
perché utilizzare array c-style allocati dinamicamente? Ti suggerirei di usare 'std :: vector' invece. Quando usi C++ 11 puoi costruirli usando gli elenchi di inizializzazione, ad es. 'void foo (vector); foo ({"hi", "there"}); 'dovrebbe funzionare in C++ 11 –
Grizzly