Cでstd::pairとstd::make_pairを使用する方法はありますか?それらはC++で適用できるようです。
私が使ったように
#include "utility"
そのようなファイルが見つからないと言っています
提案をありがとう
C++ のみです。C にはテンプレートがないため、マクロを使用して独自のマクロを作成し、ある程度エミュレートする必要があります。次に例を示します。
#define PAIR_TYPE(type1, type2)\
typedef struct {\
type1 first;\
type2 second;\
}
#define MAKE_PAIR(val1, val2) {val1, val2}
PAIR_TYPE(int, float) mypair;
mypair p = MAKE_PAIR(1, 12.0);
しかし、それは本当に面倒なことではありません。結果のコードは、単純な構造体を使用するよりも冗長で、あまり明白ではありません。
いいえ、C で STL を使用することはできません (STL は C++ および Objective-C++ でのみ機能するため)。std::pair構造体とポインターを使用して模倣できます (C はテンプレートをサポートしていないため)。
struct pair {
void *first;
void *second;
};
void FreePair(struct pair* pair) {
free(pair->first);
free(pair->second);
free(pair);
}
struct pair* MakePair(void *f, void *s, size_t fsize, size_t ssize) {
struct pair* p = malloc(sizeof(struct pair));
if (p == NULL) return NULL;
p->first = malloc(fsize);
p->second = malloc(ssize);
if (p->first == NULL || p->second == NULL) {
FreePair(p);
return NULL;
}
memcpy(p->first, f, fsize);
memcpy(p->second, s, ssize);
return p;
}
int main() {
int a = 42;
const char* str = "Hello";
struct pair* p = MakePair(&a, &str, sizeof(a), sizeof(str));
printf("%d, %s", *(int*)p->first, *(const char**)p->second); // output: "42, Hello"
FreePair(p); // ^^ yes, this pointer pointer is correct
return 0;
}
Cでstd::pairとstd::make_pairを使用する方法はありますか? それらはC++で適用できるようです。
No.std::pairは C++ のテンプレート クラスであり、C にはクラスはありません。
Cのペアにも似たもの(つまり、簡単に使用できる事前定義されたデータ構造)はありません。
いいえ、それらは C++ 標準ライブラリの型です。これは std:: 名前空間の構文を説明しています (C も名前空間をサポートしていません)。
「ユーティリティ」は標準の C ヘッダーではありません。
いいえ、標準の C++ ライブラリは、C 言語の一部ではないテンプレートに完全に依存しています。