如何打印结构的每个成员

use*_*346 5 c++ struct

假设我有一个包含50个整数的结构。有没有一种方法可以打印出每个整数的值而不必手动键入呢?

例:

struct foo
{
  int one; //= 1
  int two; //= 2
  int three; //= 3
  ...
  int fifty; //= 50
};
int main()
{
    foo bar;
    int dream;
    cout << someThing(bar) //prints 12345...50
}
Run Code Online (Sandbox Code Playgroud)

编辑:我意识到这样的数据应该存储在数组中,这只是一个假设的问题。我只是好奇是否存在这样的事情。

pax*_*blo 5

好吧,您可能应该首先使用数组来处理此类事情,因为那样会使此任务变得容易得多:-)

但是,您可以尝试将结构转换为数组并将其打印出来。无法保证它在每个实现中都能正常工作,因为可能是结构被填充为数组的方式不同,尽管我无法想象为什么,但是您可能会很幸运:

int *base = (int*)(&bar.one);
for (int i = 0; i < 50; i++)
    std::cout << "Item #" << (i + 1) << " = " << base[i] << '\n';
Run Code Online (Sandbox Code Playgroud)

例如,以下程序:

#include <iostream>

struct foo {
  int one, two, three, four;
};

int main() {
    foo bar;
    bar.one = 42;
    bar.two = 314159;
    bar.three = 271828;
    bar.four = 1414;

    int *base = (int*)(&bar.one);
    for (int i = 0; i < 4; i++)
        std::cout << "Item #" << (i + 1) << " = " << base[i] << '\n';
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出此:

Item #1 = 42
Item #2 = 314159
Item #3 = 271828
Item #4 = 1414
Run Code Online (Sandbox Code Playgroud)

在我的环境中(Debian 7,g ++ 4.7.2):

但是,如果您想将它们视为数组,则它们实际上应该数组。