如何在C++中声明带有已填充信息的指针
How can I declare a pointer with filled information in C++?
extern "C" {
typedef struct Pair_s {
char *first;
char *second;
} Pair;
typedef struct PairOfPairs_s {
Pair *first;
Pair *second;
} PairOfPairs;
}
Pair pairs[] = {
{"foo", "bar"}, //this is fine
{"bar", "baz"}
};
PairOfPairs pops[] = {
{{"foo", "bar"}, {"bar", "baz"}}, //How can i create an equivalent of this NEATLY
{&pairs[0], &pairs[1]} //this is not considered neat (imagine trying to read a list of 30 of these)
};
如何实现上述样式声明语义?
在 C++11 中,您可以编写:
PairOfPairs pops[] = {
{ new Pair{"a", "A"}, new Pair{"b", "B"} },
{ new Pair{"c", "C"}, new Pair{"d", "D"} },
// the grouping braces are optional
};
请注意使用免费存储的含义:在程序执行结束时(如静态对象)或其他任何时间(没有相应的delete
)不会销毁在那里分配的对象。如果 Pair 是 C 结构并且不管理资源(并且您始终希望程序在退出之前使用该内存),则在托管实现中可能不是问题。
编辑:如果无法使用 C++11 功能,则始终可以创建帮助程序函数。例:
static Pair* new_pair(const char* first, const char* second)
{
Pair* pair = new Pair;
pair->first = first;
pair->second = second;
return pair;
}
在这种情况下,我认为宏会增加代码的可读性。您可以创建一个不受保护的包含文件:
/* file: pairs.def */
PAIR_DEF(foo, bar)
PAIR_DEF(bar, baz)
//...
初始化pairs
数组时,应使用此文件:
Pair pairs[] = {
#define PAIR_DEF(x, y) { #x, #y },
#include "pairs.def"
#undef PAIR_DEF
};
您可以创建相应的枚举常量:
enum PairEnum {
#define PAIR_DEF(x, y) PAIR_ ## x ## _ ## y,
#include "pairs.def"
#undef PAIR_DEF
};
然后创建一个帮助程序宏来帮助您初始化pops
数组。
#define PAIR(x, y) &pairs[PAIR_ ## x ## _ ## y]
PairOfPairs pops[] = {
{ PAIR(foo, bar), PAIR(bar, baz) },
//...
};
这类似于我用来将enum
值与字符串相关联的技术,如我对此问题的回答中所述。
相关文章:
- 正在查找文档以获得PS4平台的C++中的设备信息
- 在c++中用vector填充一个简单的动态数组
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 如何使用用户输入在C++中正确填充2D数组
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 如何找到大小'x'数组是否完全填充,在C++?
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 通过for循环使用用户输入填充列表
- 如何设置一个范围来提取我想要获得的信息
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 如何正确填充在堆上分配的二维数组?
- 将数字转换为填充字符串
- 系统参数信息A 与 SPI_GETMOUSE 返回 0
- 有没有办法在一行中填充矢量图
- 为什么 gcovr 会生成空覆盖率统计信息?
- 用C++中的数字和条件填充向量
- 用真值填充矢量
- 使用结构成员指针在C++中填充结构
- 如何在C++中声明带有已填充信息的指针
- 如何使用向量中的信息填充数组并从数组中选择随机项