2012-01-05 21 views
6

xem xét phương phápĐi qua mảng inline đôi như là đối số phương pháp

functionA (double[] arg) 

Tôi muốn vượt qua một mảng inline đôi, như

functionA({1.9,2.8}) 

và không tạo ra một mảng đầu tiên và sau đó vượt qua nó, như

double var[] = {1.0,2.0}; 
functionA(var); 

Điều này có thể thực hiện với C++ không? Nghe có vẻ đơn giản, nhưng tôi không thể tìm thấy một gợi ý nào liên quan đến câu hỏi của tôi khiến tôi nghi ngờ :).

+0

trong phương pháp C++ ** ** là hàm thành viên ảo tồn tại thông qua cấu trúc phân cấp – DaddyM

Trả lời

8

Bạn có thể làm điều này với std::initializer_list<>

#include<vector> 

void foo(const std::initializer_list<double>& d) 
{ } 

int main() 
{ 
    foo({1.0, 2.0}); 
    return 0; 
} 

nào biên dịch và làm việc cho tôi dưới g ++ với -std=c++0x quy định.

5

này làm việc với C++ 0x

void functionA(double* arg){ 
    //functionA 
} 

int main(){ 
    functionA(new double[2]{1.0, 2.0}); 
    //other code 
    return 0; 
} 

Mặc dù bạn cần phải chắc chắn rằng bộ nhớ giao mới sẽ bị xóa trong functionA(), thất bại mà bạn sẽ có một rò rỉ bộ nhớ!

3

Bạn có thể làm điều đó trong C++ 11 bằng cách sử dụng std::initializer_list.

void fun(std::initializer_list<double>); 
// ... 
fun({ 1., 2. }); 

Bạn không thể làm điều đó trong C++ 03 (hoặc sẽ liên quan đến đủ bản mẫu sẽ không khả thi).