Ограничение шаблонных типов классов - PullRequest
0 голосов
/ 30 июня 2018

У меня есть следующие определения классов:

// A TileBase contains a deceleration for game events that will be present in 
// Static and Dynamic tiles
class TileBase

// To use tiles in your game, create a tile base for Tile to inherit from, then 
// create game-specific tiles as derivitives of StaticTile or DynamicTile
template<typename aTileBase> class Tile : public aTileBase

Классы StaticTile и DynamicTile являются производными от Tile. Цель состоит в том, чтобы методы, объявленные в TileBase, присутствовали во всех производных классах Tile через динамическое приведение.

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

1 Ответ

0 голосов
/ 30 июня 2018

Это легко сделать, используя std::is_base_of<>

template<typename aTileBase> 
class Tile : public aTileBase {
  static_assert(std::is_base_of<TileBase, aTileBase>::value, "");

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