У меня такая ситуация.
struct ViewModel {...};
struct Movable : virtual ViewModel {...};
struct Selectable : virtual ViewModel {...};
(Это все "интерфейсные" классы без элементов данных)
Существует много подчиненных интерфейсов, подобных Movable
и Selectable
, описывающие различные функции, которые ViewModel
могут иметь или не иметь, с соответствующими методами для работы с этими функциями. Идея состоит в том, что ViewModel
будет реализовывать кучу из них.
Теперь я реализую функцию, которая нуждается в ViewModel
, который равен Movable
и Selectable
. Конечно, я мог бы
struct MoveSelectable : virtual Movable, virtual Selectable {};
И потребовать, чтобы MoveSelectable
также был реализован, но это слишком много. Можно ли создать комбинатор так, чтобы я мог делать это без введения нового класса, чтобы разработчику модели представления не нужно было знать об этой комбинации? Например,
void selectAndMove(intersection<Movable, Selectable>* viewModel) {...}