0

サーバーから可変量のデータを取得するプログラムを作成しています。3 つの異なる変数セットを保持するために使用する 3 つの異なる構造体があります (これがクラスでも実行できるかどうか知りたいのですが)。サーバーによってデータ セットの量が異なるため、文字列で構造体に名前を付けたり、同様のことができるようにしたいと考えています。

これを行う方法はありますか、または同様のことを行うための良い習慣はありますか? 前もって感謝します。

簡単な例:

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ます。まさに私が探していたものでした。

4

3 に答える 3

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;
于 2012-08-29T06:04:41.913 に答える
1

構造体でできるなら、クラスでもできます。「名前構造体」とは、それらをキーで格納することを指していると思いますか? mapこの目的でa を使用できます。クラスでそれを行う場合 (これをお勧めします) 、変数のさまざまなセットに対してamap<string, BaseDataClass*>と派生を使用できます。BaseDataClass

于 2012-08-29T06:05:28.287 に答える
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"]; }
于 2012-08-29T06:13:07.503 に答える