Можно ли добавить структуру с определенным смещением в ее производный класс в C ++? - PullRequest
0 голосов
/ 04 февраля 2019

Просто хотел спросить, возможно ли добавить структуру с определенным смещением в ее производный класс?

Пример -

struct A
{
    int a;
    char b;
};

struct B : A
{
    int c; // place this before b?
};

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

К сожалению, без изменения структуры A это невозможно.Вы можете добиться этого, сделав структуру A более настраиваемой:

template<typename T = void>
struct A {
    int a;
    T c;
    char b;
};

template<>
struct A<void> {
    int a;
    char b;
};

//           v------ Adds the int as the C member
struct B : A<int> {};

//           v----- Add no member
struct C : A<> {};
0 голосов
/ 04 февраля 2019

Нет, вы не можете обойти способ, которым компилятор должен упорядочивать элементы.

Но вы можете основать решение на

template<typename A> struct B
{
    int c;
    A a;
};

И вы можете создать экземпляр с помощью say

B<A> foo;

Даже в этом случае может быть заполнение между c и a.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...