C ++ 'da bir değişken aracılığıyla yapıdaki bir üyeye erişme


10

İki üye ile bir yapı var, örneğin:

struct DataSet {
    int x;
    int y;
};

..., ve ben bir yöntemde, ancak her seferinde sadece bir tane erişmek zorunda, örneğin:

void foo(StructMember dsm) { // ("StructMember" does not exist)
    DataSet ds;
    ds.x = 4;
    ds.y = 6;

    std::cout << ds.dsm * ds.dsm << std::endl;
}
foo(x);
foo(y);

Çıktıya sahip olmak istiyorum:

16
36

Böyle bir sorunu çözmem gerektiğinde ne yapmalıyım? Bir üyeye erişebilecek bir veri türü var mı?


Aklıma gelen tek şey işaretçi aritmetiği kullanabilmeniz. Yapının başlangıcına göre bir yapı "üyesi" olarak geçebilirsiniz. Bu üyelerin büyüklüğüne bağlı olacaktır. İnts ile Seni geçerdi bu yüzden, sözcük sınırları hizalanmış olurdu garanti edemez düşünüyorum dsm = 0erişim xve dsm = 4erişim ysonra gibi bunlara erişmek istiyorum, int val = int(*(&ds+dsm)).
ocket8888

1
@ ocket8888 c++, işaretçiden üyelere sahiptir, bu nedenle bu işi yapmak için özel işaretçi saldırılarına gerek yoktur.
Süper

Haklısın. Daha önce üye olarak iki dizem vardı, ama int olarak değiştirdim. "Std ::" yi kaldırmayı unuttum.
Adrian

Yanıtlar:


10

Evet, işaretçi-üye kullanabilirsiniz. Yazımın sözdizimi TypeOfMember TypeOfStruct::*ve erişiminizestruct_variable.*pointer_variable

using StructMember = int DataSet::*;  // Pointer to a member of `DataSet` of type `int`

void foo(StructMember dsm) {
    DataSet ds;
    ds.x = 4;
    ds.y = 6;

    std::cout << ds.*dsm * ds.*dsm << std::endl;
}

int main() {
    foo(&DataSet::x);
    foo(&DataSet::y);
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.