2014-02-27 7 views
2

C++에서 C에 해당하는 std::pair은 무엇입니까? 나는 웹상에서 동등한 것을 찾으려고 노력하고 있으며 무엇을하는지에 대한 설명을 찾을 수는 없다.C에서 std :: pair와 동등 함

+7

C에는 템플릿이 없으므로 해당 항목이 없습니다. 2 명의 멤버가있는 구조체를 수동으로 만들 수는 있지만, 가장 가까운 곳입니다. – Borgleader

답변

13

하나도 존재하지 않습니다. std::pair은 템플릿이고 C는 템플릿과 비슷한 것이 없습니다.

주어진 템플릿의 전문화를 위해, 당신은 어느 정도 일치하는 구조를 정의 할 수 있습니다; 그래서 std::pair<int, double>

struct pair_int_double { 
    int first; 
    double second; 
}; 

과 유사하지만 고유의 템플릿을 원하는 경우 잘못된 언어를 선택했습니다. C++에서

1

std::pair :

templte <class t1, class t2> 
struct pair { 
    t1 first; 
    t2 second; 
} 

std::pair 템플릿을 활용하여, 각각의 구체적인 인스턴스는 새로운 클래스 std::pair<myT1, myT2>을 정의합니다.

C에서 그런 일이 없다, 당신은 다른 구조체 각 시간을 선언 할 수 있습니다, 또는 C 템플릿이없는 것을 말하는 다른 답변이 정확하지만 ... *

struct pair { 
    struct myT1 first; 
    struct myT2 second; 
} 
1

을 무효 사용 일반 쌍 유형을 가질 수 없다는 가정은 잘못되었습니다. 일반 유형이 정말로 필요한 경우 즉, 쌍을 사용할 유형 쌍마다 struct을 수동으로 정의하지 않으려면 3 가지 옵션이 있습니다.

먼저 두 개의 void* 유형을 포함하는 구조체를 사용할 수 있으며이 포인터를 데이터의 일반 저장 포인터로 사용할 수 있습니다. (이 불필요하게 복잡하고 나는 일반적으로 그것을 권하고 싶지 않다) 예를

struct pair 
{ 
    union 
    { 
    int first_int; 
    float first_float; 
    }; 
    union 
    { 
    int second_int; 
    float second_float; 
    } 
} 

를 들어, 페어 구조 유형의 양이 사전에 알려진 경우

둘째, 당신은 당신의 구조체에 union을 사용할 수 있습니다 또는 세 번째로 파라 메트릭 매크로를 사용하여 지속적으로 반복하지 않고도 필요한 유형의 구조체 정의를 생성 할 수 있습니다.

아니면 템플릿 기반 유형에 의존하지 않는 코드를 작성하는 방법을 생각해보십시오.

+0

여기에 일반적인 내용이 표시되지 않습니다. –