Можно ли сделать безымянную структуру статичной?

Можете ли вы сделать неназванную структуру статическим членом класса?

struct Foo
{
    struct namedStruct
    {
        int memb1, memb2;
    };
    static namedStruct namedStructObj;
    struct
    {
        int memb1, memb2;
    } unnamedStructObj;
};

Foo::namedStruct Foo::namedStructObj;
// The unnamed type doesn't seem to have a type you can write

2 ответа

Решение

Да, это возможно

struct Foo
{
    struct
    {
        int memb1, memb2;
    } static unnamedStructObj;
};

decltype(Foo::unnamedStructObj) Foo::unnamedStructObj;

Здесь, так как вы не можете ссылаться на безымянную структуру, используя decltype(Foo::unnamedStructObj) позволяет получить тип Foo::unnamedStructObj, так что вы можете написать определение.

Вы можете сделать это с помощью decltype():

struct Foo
{
    struct namedStruct
    {
        int memb1, memb2;
    };
    static namedStruct namedStructObj;
    static struct
    {
        int memb1, memb2;
    } unnamedStructObj;
};

Foo::namedStruct Foo::namedStructObj;
decltype(Foo::unnamedStructObj) Foo::unnamedStructObj;
Другие вопросы по тегам