[英]Iterate through struct variables
我想得到一个结构变量的迭代器,以根据枚举ID在运行时设置一个特定的变量。 例如 -
struct {
char _char;
int _int;
char* pchar;
};
enum {
_CHAR, //0
_INT, //1
PCHAR //2
};
int main()
{
int i = 1; //_INT
//if i = 1 then set variable _int of struct to some value.
}
如果没有if / else或switch case语句,你能做到吗?
不,C ++不直接支持这一点。
但是你可以使用boost :: tuple做一些非常相似的事情:
enum {
CHAR, //0
INT, //1
DBL //2
};
tuple<char, int, double> t('b', 1, 3.14);
int i = get<INT>(t); // or t.get<INT>()
您可能还想看看boost :: variant 。
C ++不支持这一点。 要遍历struct成员,您需要一些方法来了解struct成员是什么。 编译的C ++程序不会提供此信息。 对于他们来说,struct只是一个字节集合。
像C#(实际上是.NET)和Java这样的语言可以做到这一点,因为它们存储有关结构(反射信息)的信息以及程序。
如果你真的非常渴望这个功能,你可以尝试通过解析编译器创建的符号文件来实现它。 然而,这是非常先进的,不值得努力。
C和C ++不允许这样做。
您必须删除if / else或switch / case语句。
不。 在C ++中,您通常会为枚举执行以下操作:
enum VarTypes {
vtChar = 0,
vtInt,
vtDouble,
vtFirst = vtChar,
vtLast = vtDouble
};
您仍然需要一个开关块来设置结构上的成员。 如果您有这种倾向,请查看Microsoft代码中的一些Variant实现。 这有点类似于你正在做的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.