2012-08-29 2 views
0

서버에서 다양한 양의 데이터를 가져올 프로그램을 작성 중입니다. 세 가지 다른 구조체가 있습니다. 세 개의 다른 변수 집합을 유지하는 데 사용됩니다 (클래스로도이 작업을 수행 할 수 있는지 알고 싶습니다.). 서로 다른 서버는 다양한 양의 데이터 집합을 가지므로 문자열을 사용하여 구조체의 이름을 지정하거나 비슷한 작업을 수행 할 수 있어야합니다.구조체 또는 객체의 이름과 비슷한 문자열이나 다른 문자열을 전달하려면 어떻게해야합니까?

이와 관련하여 갈 수있는 방법이 있습니까? 아니면 비슷한 것을하기위한 좋은 습관이 있습니까? 미리 감사드립니다.

빠른 예 :

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은 내가 찾고있는 것이 었습니다. 당신이 이름을 가진 구조체하려면

+2

이 이름의 사용 방법에 대한 의사 코드를 제공해 주시겠습니까? 객체 ID 또는 디버깅 수단 또는 ... – xtofl

+0

['std :: map'] (http://en.cppreference.com/w/cpp/container/map)은 어떻습니까? –

+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; 
+0

std :: cout << f2.name() ... - 왜 괄호가 사용됩니까? – neagoegab

+0

@neagoegab typo, 지금 고쳐 주셔서 감사합니다. – juanchopanza

1

구조체로 처리 할 수있는 경우 클래스로 처리 할 수 ​​있습니다. 나는 'name structs'를 키에 의해 저장하는 것을 가리킨다 고 가정한다. 이 목적으로 map을 사용할 수 있습니다. 클래스를 사용하여 수행하려는 경우 (내가 권장하는) map<string, BaseDataClass*>을 사용하고 다른 변수 세트에 BaseDataClass을 파생시킬 수 있습니다. 다른 서버의 데이터 세트의 다양한 양의 것 때문에

+1

그 결과 슬라이스가 생기면 기본 클래스에 대한 포인터 또는 스마트 포인터의 맵이 필요합니다. – juanchopanza

+0

@juanchopanza 그 점을 지적 해 주셔서 감사합니다, 당신은 절대적으로 옳습니다. 이것을 반영하기 위해 편집 된 게시물. – pauluss86

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"]; } 
관련 문제