C中的std :: pair的等价物

Que*_*Guy 2 c c++ std-pair

什么是std::pairC++ 的C等价物?我试图在网上找到相同的东西,除了解释它的作用之外什么都找不到.

Mik*_*our 15

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

对于模板的给定特化,您可以定义一个或多或少等效的结构; 所以这std::pair<int, double>是类似的

struct pair_int_double {
    int first;
    double second;
};
Run Code Online (Sandbox Code Playgroud)

但如果你想要一个通用模板,你就选择了错误的语言.


And*_*tin 5

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

首先,您可以使用包含两种类型的结构void*,并将这些指针用作数据的通用存储指针。(这不必要地复杂,我一般不会推荐它)

其次,如果预先知道对结构的类型数量,则可以union在结构中使用 a ,例如

struct pair 
{
  union
  {
    int first_int;
    float first_float;
  };
  union
  {
    int second_int;
    float second_float;
  }
}
Run Code Online (Sandbox Code Playgroud)

第三,您可以使用参数宏来生成所需类型的结构定义,而无需不断重复自己。

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