迭代结构变量

时间:2010-02-05 07:16:08

标签: c++ iterator

我想获得一个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语句,你能做到吗?

4 个答案:

答案 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实现。这有点类似于你正在做的事情。