如何传递字符串或类似于结构或对象名称的东西?

时间:2012-08-29 05:57:48

标签: c++ string class object struct

我正在编写一个程序,它将从服务器中提取可变数量的数据。我将使用三种不同的结构来保存三组不同的变量(虽然我想知道这是否也可以用类来完成)。因为不同的服务器将具有不同数量的数据集,所以我希望能够使用字符串命名结构或能够执行类似的操作。

有没有办法解决这个问题,或者做任何类似的好事?提前致谢。

快速举例:

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正是我所寻找的。

3 个答案:

答案 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::mapstd::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"]; }