Trong C++ 11 bạn có thể. Một lưu ý trước: Không new
mảng, không cần thiết cho điều đó.
Đầu tiên, string[] strArray
là lỗi cú pháp, phải là string* strArray
hoặc string strArray[]
. Và tôi cho rằng đó chỉ là vì ví dụ mà bạn không vượt qua bất kỳ tham số kích thước nào.
#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);
}
Lưu ý rằng sẽ tốt hơn nếu bạn không cần phải vượt qua kích thước mảng làm tham số bổ sung và may mắn có cách: Mẫu!
template<unsigned N>
void foo(int const (&arr)[N]){
// ...
}
Lưu ý rằng điều này sẽ chỉ khớp với các mảng ngăn xếp, như int x[5] = ...
. Hoặc tạm thời, được tạo bởi việc sử dụng alias
ở trên.
int main(){
foo(alias<int[]>{1, 2, 3});
}
tại sao bạn sử dụng mảng được phân bổ động theo kiểu c? Tôi sẽ đề nghị bạn sử dụng 'std :: vector' thay thế. Khi sử dụng C++ 11, bạn có thể tạo chúng bằng cách sử dụng danh sách khởi tạo, ví dụ: 'void foo (vector); foo ({"hi", "there"}); 'nên hoạt động trong C++ 11 –
Grizzly