簡體   English   中英

C++ 匿名結構?

[英]C++ anonymous structs?

我之前的一篇文章提出了匿名結構的話題,有幾位評論員說這些在 C++ 中是不允許的。

這是我經常使用的結構:這是合法的 C++ 嗎?

const int HeaderSize = 8192;
struct Header
{
    union
    {
        struct
        {
            int r;
            // other members
        };
        unsigned char unused[HeaderSize]; // makes Header struct's size remain constant as members are added to the inner struct
    };
    // Default constructor
    Header()
    {

    }
};

在標准 C++ 中不能有匿名結構(請參閱此處了解原因),盡管主流編譯器將其作為擴展提供。

我猜你打算將二進制數據直接讀入這個結構。 這在 Modern C++ 中是不受歡迎的,最好使用數據序列化。

如果您堅持直接閱讀結構,也許另一種選擇是:

struct Header
{
    int r;
    // other members;
};

struct Image
{
    Header hdr;
    char padding[HeaderSize - sizeof(Header)];
    // rest of image
};

C++ 中沒有匿名結構,只有匿名聯合。 所以你必須為結構提供一個名稱。

此外,匿名聯合也不能有嵌套類型,這意味着您也必須將結構從聯合中取出。

因此,結合這兩個位,這意味着您需要編寫:

const int HeaderSize = 8192;
struct Header
{
    struct Members
    {
        int r;
        // other members
    };

    union
    {
        Members members;
        unsigned char unused[HeaderSize]; // makes Header struct's size remain constant as members are added to the inner struct
    };

    // Default constructor
    Header()
    {

    }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM