2014-02-27 74 views
2

C++中std::pair的C等價物是什麼?我試圖在網上找到相應的內容,但找不到任何內容,只能解釋它的功能。C中std :: pair的等效形式

+7

你不能有等價物,因爲C沒有模板。你可以用2個成員手動創建一個結構體,但這是你最接近的。 – Borgleader

回答

13

沒有一個。 std::pair是一個模板,C沒有任何類似於模板的東西。

對於給定的模板專業化,您可以定義一個或多或少等價的結構;讓std::pair<int, double>類似於

struct pair_int_double { 
    int first; 
    double second; 
}; 

但你選擇了錯誤的語言,如果你想有一個通用模板。

1
std::pair

在C++:

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

std::pair利用的模板,所以每個具體實例定義了一類新std::pair<myT1, myT2>

有C中沒有這樣的事情,你可以每次都申報了不同的結構,或者用void * ...

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

而其他的答案是正確地說,C沒有模板,假設你不能有一個通用的對類型是錯誤的。如果您確實需要泛型類型,也就是說,您不想爲每對要爲其配對的每對類型手動定義struct,則只剩下3個選項。首先,您可以使用包含兩個void*類型的結構,並將這些指針用作數據的通用存儲指針。 (這是不必要的複雜,我一般不會推薦它)

其次,如果類型爲你對結構的量預先知道,你可以用你的結構一個union,例如

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

或者,第三,您可以使用參數宏來生成您需要的類型的結構定義,而無需不斷重複自己。

或者,也可以考慮一種編寫不依賴模板類型的代碼的方法。

+0

我在這裏沒有看到任何通用的東西 –

相關問題