我有以下类定义:

// 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


StaticTileDynamicTile派生自Tile。目标是通过动态强制转换在所有TileBase派生类中的Tile中声明的方法。

我想将Tile的模板定义限制为仅接受从TileBase派生的数据类型。有什么方法可以在运行时不使用动态强制转换和断言来完成此任务?

最佳答案

使用std::is_base_of<>很容易做到

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

  [...]
};

09-06 21:50