C语言中std::pair的等价形式 > C的等价于 STD::从C++中配对< /代码>?我试图在网络上找到类似的东西,除了解释它的功能外,什么也找不到。

C语言中std::pair的等价形式 > C的等价于 STD::从C++中配对< /代码>?我试图在网络上找到类似的东西,除了解释它的功能外,什么也找不到。,c++,c,std-pair,C++,C,Std Pair,没有std::pair是一个模板,C没有任何类似于模板的东西 对于给定的模板专业化,您可以定义或多或少等效的结构;因此,std::pair与 struct pair_int_double { int first; double second; }; 但是如果您想要一个通用模板,您选择了错误的语言。std::pair在C++: template <class t1, class t2> struct pair { t1 first; t2 second; }

没有
std::pair
是一个模板,C没有任何类似于模板的东西

对于给定的模板专业化,您可以定义或多或少等效的结构;因此,
std::pair

struct pair_int_double {
    int first;
    double second;
};

但是如果您想要一个通用模板,您选择了错误的语言。

std::pair
在C++:

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

虽然其他答案说C没有模板是正确的,但不能有泛型对类型的假设是错误的。如果您确实需要泛型类型,也就是说,您不想为每对要使用一对的类型手动定义一个
struct
,那么您只剩下3个选项

首先,您可以使用包含两个
void*
类型的结构,并将这些指针用作数据的通用存储指针。(这是不必要的复杂,我一般不建议这样做)

其次,如果事先知道pair结构的类型数量,那么可以在结构中使用
联合

struct pair 
{
  union
  {
    int first_int;
    float first_float;
  };
  union
  {
    int second_int;
    float second_float;
  }
}
第三,可以使用参数化宏生成所需类型的结构定义,而无需不断重复


或者,可以考虑编写一个不依赖模板类型的代码的方法。

< P>。其他答案很清楚,C没有任何类似于C++模板的东西。 但是,您可以使用
void*
作为存储任何类型变量地址的方法,方法是强制转换到所需数据类型的指针

在此之后,C中成对结构的可能实现如下所示:

struct pair {
    void* first;
    void* second;
};

你不能有一个等价的,因为C没有模板。您可以手动创建一个包含2个成员的结构,但这是最接近的。我在这里没有看到任何通用的
struct pair {
    void* first;
    void* second;
};