来自C ++的std::pair
的C等价物是多少?我试图在网上找到相同的东西,除了解释它的作用之外什么都找不到。
答案 0 :(得分:15)
没有一个。 std::pair
是一个模板,C与模板没有任何相似之处。
对于模板的给定特化,您可以定义一个或多或少等效的结构;所以std::pair<int, double>
类似于
struct pair_int_double {
int first;
double second;
};
但如果你想要一个通用模板,你就选择了错误的语言。
答案 1 :(得分:1)
std::pair
:
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;
}
答案 2 :(得分:1)
虽然其他答案在说C没有模板时是正确的,但假设您不能拥有通用对类型是错误的。如果你真的需要一个泛型类型,也就是说,你不想为你想要使用它们的每对类型手动定义struct
,那么剩下3个选项。
首先,您可以使用包含两个void*
类型的结构,并将这些指针用作数据的通用存储指针。 (这是不必要的复杂,我通常不推荐它)
其次,如果预先知道对结构的类型数量,则可以在结构中使用union
,例如
struct pair
{
union
{
int first_int;
float first_float;
};
union
{
int second_int;
float second_float;
}
}
或者第三,您可以使用参数宏来生成所需类型的结构定义,而无需不断重复自己。
或者,考虑一种编写不依赖模板类型的代码的方法。
答案 3 :(得分:0)
正如其他答案所明确指出的,C 没有任何类似于 C++ 模板的内容。
但是,您可以使用 void*
作为存储任何类型变量地址的方法,方法是将其强制转换为所需数据类型的指针。
在此之后,在 C 中可能实现的对结构如下:
struct pair {
void* first;
void* second;
};