我正在编写一个程序,它将从服务器中提取可变数量的数据。我将使用三种不同的结构来保存三组不同的变量(虽然我想知道这是否也可以用类来完成)。因为不同的服务器将具有不同数量的数据集,所以我希望能够使用字符串命名结构或能够执行类似的操作。
有没有办法解决这个问题,或者做任何类似的好事?提前致谢。
快速举例:
struct foo {
std::string name;
std::string ipAddress;
std::string macAddress;
};
struct bar {
std::string dhcpServer;
std::string tftpServer;
};
foo [string_as_name_one];
bar [string_as_name_two];
我希望随意命名结构。 map
看起来与我正在寻找的相似,所以我现在正在阅读它。
感谢您的帮助和快速回复,map
正是我所寻找的。 p>
答案 0 :(得分:1)
如果您想要一个名称为
的结构struct Foo {
std::string name;
Foo(const std::string& name) : name(name) {}
};
Foo f1("Bob");
Foo f2("Mary");
std::cout << f2.name << "\n";
如果您想要的是一个可以存储在集合中并根据名称查找的结构,那么您可以使用std::map
或std::unordered_map
:
struct Bar{};
std::map<std::string, Bar> m;
Bar b1, b2;
m["Bob"] = b1;
m["Mary"] = b2;
答案 1 :(得分:1)
如果您可以使用结构,则可以使用类来完成。我假设'name structs'指的是用密钥存储它们?您可以使用map
来实现此目的。如果您打算使用类(我推荐),您可以使用map<string, BaseDataClass*>
并为不同的变量集派生BaseDataClass
。
答案 2 :(得分:0)
因为不同的服务器将拥有不同数量的数据集, 我希望能够用字符串命名结构或能够做到 类似的东西。
您不需要“使用字符串命名结构”,只需将检索到的数据放入某种键值存储中即可。
#include <map>
#include <string>
typedef std::map<std::string, std::string> server_result;
struct server
{
server(std::string uri): uri(uri) {}
server_result get(){ server_result result; /* retrieve results, put them in result[name]= value; */ return result; }
private:
std::string uri;
};
// or
class server
{
std::string uri;
public:
server(std::string uri): uri(uri) {}
server_result get(){ server_result result; /* retrieve results, put them in result[key]= value; */ return result; }
};
// use it like
#include <iostream>
#include <ostream>
int main(){ server_result result= server("42.42.42.42").get(); std::cout<< result["omg"]; }