[英]can I access a struct inside of a struct without using the dot operator?
我有2個結構,其90%的字段相同。 我想在結構中對這些字段進行分組,但我不想使用點運算符來訪問它們。 原因是我已經使用第一個結構編碼並剛剛創建了第二個結構。
之前:
typedef struct{
int a;
int b;
int c;
object1 name;
} str1;
typedef struct{
int a;
int b;
int c;
object2 name;
} str2;
現在我要創建第三個結構:
typedef struct{
int a;
int b;
int c;
} str3;
並將str1和atr2更改為:
typedef struct{
str3 str;
object1 name;
} str1;
typedef struct {
str3 str;
object2 name;
} str2;
最后,我希望能夠通過以下方式訪問a,b和c:
str1 myStruct;
myStruct.a;
myStruct.b;
myStruct.c;
並不是:
myStruct.str.a;
myStruct.str.b;
myStruct.str.c;
有沒有辦法做這樣的事情。 這樣做的原因是我希望保持數據的完整性,如果發生結構的chnges並且不重復自己而不必更改我現有的代碼並且沒有嵌套太深的字段。
決議:thx為您的所有答案。 這樣做的最后一種方式,我可以使用自動完成也是如下:
struct str11
{
int a;
int b;
int c;
};
typedef struct str22 : public str11
{
QString name;
}hi;
是。 而是使用C風格的繼承,使用C ++風格:
struct str3{
int a;
int b;
int c;
};
struct str2 : public str3{
object2 name;
};
第一句話。 這個
struct
{
int a;
int b;
int c;
} str3;
定義一個對象str3,而不是一個str3類型。
你可以使用繼承來實現你想要的,但我建議你改變你的結構數量
struct str1
{
int a;
int b;
int c;
};
struct str2 : public str1
{
object1 name;
};
這樣做的原因是,如果要發生結構的chnge,我希望保持數據的完整性
為了實現這一目標,我寧願使用適當的封裝,訪問器和繼承來使用戶代碼中的布局更改不可見:
class DataHolder {
int a_, b_, c_;
public:
int a() const { return a_; }
int b() const { return b_; }
int c() const { return c_; }
};
class User : public DataHolder {
object o_;
public:
object& getObject() { return o_; }
};
我不確定C ++(我還在學習C ++),但在C語言中,有些編譯器允許使用匿名結構。 使用GCC 4.3時,如果沒有指定標志,則以下編譯沒有錯誤,但無法使用-ansi
或-std=c99
進行編譯。 它成功編譯-std=c++98
但是:
int main (int argc, char *argv[])
{
struct
{
struct
{
int a;
int b;
int c;
};
int test;
} global;
global.a = 1;
global.b = 2;
global.c = 3;
global.test = 4;
return global.b;
}
不要使用愚蠢的技巧來避免適當的重構。 它可以節省你一點點打字,但它會咬你的...后來。 如果編輯很復雜,那么你使用的是錯誤的工具和/或你的命名方案不好(1個字母的名稱很難找到/替換)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.