2014-10-06 124 views
0

我已經在C++中編寫了一個接收結構作爲輸入的函數。收到的結構對象有兩個數組。我需要將這兩個數組用於不同的目的。數組名稱已經以某種格式創建。如何檢索字符串中的數組名稱。檢索數組名稱

struct INFO 
{ 

float fADataLHS[3] = {1,2,3}; 
float fADataRHS[3] = {4,5,6}; 

已經定義了結構INFO,其中兩個數組已被定義初始化。函數useStruct使用兩個函數用於不同的目的。

void useStruct(struct *INFO) 
{ 
    --------; 
    --------; 
} 

int main() 
{ 
    struct INFO info; 
    useStruct(info); 

} 

我想要一個方法,其中我可以檢索數組的名稱,例如。 fAdataLHS並將其存儲爲字符串。這個想法是從字符串名稱中找到子字符串LHS和RHS,然後相應地處理。 PS:我對C++很陌生。

+1

如果您不熟悉C++,除非您知道*如何在C中執行此操作,並希望獲得「自然」C++答案,否則請不要跨越C標籤。在C++中,您不需要重複'struct',並且您*知道* INFO中數組的「名稱」是什麼,所以......只是使用它們? – crashmstr 2014-10-06 14:31:25

+5

如果您要求反射像功能(如C#)它不能完成。 – Borgleader 2014-10-06 14:31:37

+0

在運行時我不認爲你需要他們的名字。在結構聲明中,你向我展示了兩個數組的長度是確定的。你可以通過計算每個數組的偏移量來真正引用它們。 – HuStmpHrrr 2014-10-06 14:37:12

回答

0

如果我理解正確,你的用例是這樣的:你有兩個(或更多)名字,每個名字都有一個浮點數組與它關聯。您想按名稱獲取數組並處理數據。

考慮以下代碼:

class INFO 
{ 
    std::map<std::string, std::vector<float>> vectors; 

public: 

    INFO() : vectors{} 
    { 
     vectors["fADataLHS"] = { 1, 2, 3 }; 
     vectors["fADataRHS"] = { 4, 5, 6 }; 
    } 

    const std::vector<float>& operator[](const std::string& key) const // access vector by key 
    { 
     return vectors.at(key); 
    } 

}; 

void useStruct(const INFO& info) // pass instance by const reference 
{ 
    std::cout << info["fADataLHS"][0] << "\n"; // access element 0 from the fADataLHS array 

    // get the entire array: 
    const auto& arr = info["fADataRHS"]; 

    // this will throw a std::out_of_bounds 
    const auto& arr = info["non-existent-key"]; 

} 

編輯:其他一些注意事項:

    用C
  • ++儘量不要使用float - 使用double代替
  • ,如果你需要改變來自客戶端代碼的矢量內容,添加一個非const版本的operator[]
2

我會變得簡單,因爲您是C++的成員。

如果你想要將兩個數組用於不同的目的,只是做。例如:

void use_array_for_different_purposes(INFO *info) 
{ 
    // Purpose one, printing values using fADataLHS. 
    for (int i = 0; i < 3; i++) {cout << info->fADataLHS[i] << endl;} 
    // Purpose two, computing total sum using fADataRHS. 
    int acum; 
    for (int i = 0; i < 3; i++) {acum += info->fADataRHS[i];} 
} 

正如您所看到的,您不需要將數組名稱作爲字符串值。