2015-02-09 44 views
-1

這是我正在嘗試的。我已經將一個結構傳遞給一個函數。在函數中,我將結構的值存儲在一個數組中。在返回時,我只想發送基於特定條件在數組中定義的那些值。例如,假設我有一個10的數組定義,我想在該函數中根據標準僅從該數組返回5個值。下面是一個示例代碼:C++/SystemC:從C++數組中返回一個特定範圍的值

sc_uint<8> *arrayfill(struct){ 
sc_uint<8> array[10]; 

array[1] = struct.a; 
array[2] = struct.b; 
... 
if (struct.trigger == false){ 
    array[10] =0; 
} 
else 
{ 
    array[10] = struct.j; 
} 

return array; 
} 
+0

你不能返回'array',因爲它是一個局部變量,並且會在函數結束時被銷燬。 – emlai 2015-02-09 08:57:41

回答

0

因爲你不能從一個函數返回一個自動存儲陣列,我建議你返回一個std::vector<sc_uint<8>>來代替。它基本上只是將您的sc_uint<8>值包裝在易於使用和移動的動態數組中。

然後簡單地push_back您想要根據您的標準返回到vector的值。


例如:

std::vector<sc_uint<8>> arrayfill(struct){ 
    std::vecotr<sc_uint<8>> array; 
    array.reserve(10); // Reserves space for 10 elements. 

    array.push_back(struct.a); // This will be the first element in array, at index 0. 
    array.push_back(struct.b); // This will be the second element at index 1. 
    ... 
    if (struct.trigger == false){ 
     array.push_back(0); 
    } 
    else 
    { 
     array.push_back(struct.j); 
    } 
    // At this point, array will have as many elements as push_back has been called. 
    return array; 
} 

使用std::vector::insert添加值的範圍:

array.insert(array.end(), &values[3], &values[6]); 

哪裏values是一些陣列。以上將在valuesarray的末尾插入從索引3到索引5(獨佔範圍,索引6的值不會插入)中的值。

+0

嗨@zenith,謝謝你的回覆,但你知道我是否可以「推回」一系列價值觀?比如發送數組的9個值,如果struct.trigger爲false,則發送所有10個值。 – Harish 2015-02-09 09:18:12

+0

@Harish你可以使用'vector :: insert'來添加一系列值,並在我的答案中添加了一個關於這個的例子。 – emlai 2015-02-09 09:30:49

+0

聽起來不錯,謝謝.. !!! – Harish 2015-02-09 10:16:59