2014-10-06 123 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];} 
} 

正如您所看到的,您不需要将数组名称作为字符串值。