Как я могу создать псевдоним для нескольких классов в C ++ - PullRequest
2 голосов
/ 20 мая 2019

У меня есть два класса A и B, определенные в большой кодовой базе. Я хотел бы создать псевдоним типа, который означает «A или B». Обратите внимание, что этот класс никогда не переключится с A на B во время выполнения (и наоборот). Как я могу это сделать?

Я думал просто создать пустой класс AorB и сделать так, чтобы A и B оба были производными от него. Однако я бы предпочел не изменять A или B.

Я думал об использовании объединения, но это кажется расточительным с точки зрения памяти, так как это оставляет место для самого большого класса.

Чтобы попытаться прояснить ситуацию, вот код, иллюстрирующий мой вопрос:

class A;
class B;


//typedef AorB = A || B //<- how can I do sthg like that ?

class C {
   AorB myAorB; // once this object is set, it cannot change its underlying type (it stays an A or a B)
};

1 Ответ

4 голосов
/ 20 мая 2019

Обратите внимание, что этот класс никогда не переключится с A на B во время выполнения (и наоборот)

Вы хотите использовать std::conditional, например

#include <type_traits>

constexpr bool useAOrB() { /* Some actual logic here... */ return true; }

class C {
    std::conditional_t<useAOrB(), A, B> myAorB;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...