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

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

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

3

Решение

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

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

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

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

6

Другие решения

Вы можете сделать это с помощью 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;
4

По вопросам рекламы [email protected]