我想获得一个struct变量的迭代器,以根据枚举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语句,你能做到吗?
答案 0 :(得分:7)
不,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。
答案 1 :(得分:3)
C ++不支持此功能。要遍历struct成员,您需要一些方法来了解struct成员是什么。编译的C ++程序不会提供此信息。对于他们来说,struct只是一个字节集合。
像C#(实际上是.NET)和Java这样的语言可以做到这一点,因为它们存储有关结构(反射信息)的信息以及程序。
如果你真的非常渴望这个功能,你可以尝试通过解析编译器创建的符号文件来实现它。然而,这是非常先进的,不太可能值得付出努力。
答案 2 :(得分:2)
没有。 C和C ++不允许这样做。
您必须使用if / else或switch / case语句。
答案 3 :(得分:1)
不。在C ++中,你通常会为枚举做这样的事情:
enum VarTypes {
vtChar = 0,
vtInt,
vtDouble,
vtFirst = vtChar,
vtLast = vtDouble
};
您仍然需要一个开关块来设置结构上的成员。如果您有这种倾向,请查看Microsoft代码中的一些Variant实现。这有点类似于你正在做的事情。