如何将指针传递给结构数组?

时间:2013-10-16 17:44:29

标签: c++ arrays pointers struct

struct A
{
    struct one
    {
    int c;
    } details[MAX];
};

struct B
{
    struct two
    {
    int a;
    A::one b
    } details[MAX];
};

使用如下所示的验证函数来验证struct A中struct的详细信息数组:

bool ValidateOne(struct one * ptr)
{
    struct one * tmp[MAX];
    for (int i = 0; i < MAX; ++i) 
        tmp[i] = ptr+i;
    Validate(tmp[0]);
}

然后需要对struct B的details数组进行验证: 我希望这样做:

bool ValidateTwo(struct two * ptr)
{
    struct one * tmp[MAX];
    for (int i = 0; i < MAX; ++i) 
        tmp[i] = &((ptr+i)->b);
    Validate(tmp[0]);
   //validate other stuff
};

Validate(struct one * ptrs[])
{
    int count;
    for (int i = 0; i < MAX; ++i) 
        count += ptrs[i]->a;
}

上面的代码会起作用吗?

1 个答案:

答案 0 :(得分:1)

您可以定义一个知道如何到达数组中下一个项目的迭代器类型。 “A :: iterator”将在一个简单的“one”数组上运行。 “B :: iterator”将在B :: two数组上运行。

通过这种方式,您无需在任何一种情况下创建一个单独的指针数组,只需要两个不同的迭代器实现。

如果使用模板完成,则“ValidateOne()”也必须是模板。如果使用虚函数,则不需要模板。