Új hozzászólás Aktív témák

  • Jester01

    veterán

    válasz Sleed #3821 üzenetére

    Ha megoldható, akkor a tömböt add át, és a függvényen belül legyen a .adatx. Ez gondolom menne, tehát valamiért nem megvalósítható.

    Alternatívaként csinálhatsz accessor függvényt, varázsolhatsz offsetof segítségével avagy ha esetleg véletlen c++ és nem c akkor member pointerrel.

    #include <iostream>
    using namespace std;
    struct Foo
    {
    int x;
    int y;
    };

    int sum0_x(Foo* array, int count)
    {
    int r = 0;
    for(int i = 0; i < count; i += 1)
    {
    r += array[i].x;
    }
    return r;
    }

    int sum0_y(Foo* array, int count)
    {
    int r = 0;
    for(int i = 0; i < count; i += 1)
    {
    r += array[i].y;
    }
    return r;
    }

    int sum1(Foo* array, int count, int (*accessor)(Foo*))
    {
    int r = 0;
    for(int i = 0; i < count; i += 1)
    {
    r += accessor(array + i);
    }
    return r;
    }

    int sum2(Foo* array, int count, int member)
    {
    int r = 0;
    for(int i = 0; i < count; i += 1)
    {
    r += *(int*)((char*)(array + i) + member);
    }
    return r;
    }

    int sum3(Foo* array, int count, int (Foo::*member))
    {
    int r = 0;
    for(int i = 0; i < count; i += 1)
    {
    r += array[i].*member;
    }
    return r;
    }

    int accessor_x(Foo* foo)
    {
    return foo->x;
    }

    int accessor_y(Foo* foo)
    {
    return foo->y;
    }

    int main()
    {
    Foo foos[2];
    foos[0].x = 1;
    foos[0].y = 2;
    foos[1].x = 3;
    foos[1].y = 4;
    cout << "sum0(x) = " << sum0_x(foos, 2) << endl;
    cout << "sum0(y) = " << sum0_y(foos, 2) << endl;
    cout << "sum1(x) = " << sum1(foos, 2, accessor_x) << endl;
    cout << "sum1(y) = " << sum1(foos, 2, accessor_y) << endl;
    cout << "sum2(x) = " << sum2(foos, 2, offsetof(Foo, x)) << endl;
    cout << "sum2(y) = " << sum2(foos, 2, offsetof(Foo, y)) << endl;
    cout << "sum3(x) = " << sum3(foos, 2, &Foo::x) << endl;
    cout << "sum3(y) = " << sum3(foos, 2, &Foo::y) << endl;
    return 0;
    }

Új hozzászólás Aktív témák

Hirdetés