Какой существует способ гарантировать обязательную проверку в каждой реализации класса?

Есть класс - многоугольник

template <class Selector>
class NGon;

Есть несколько селекторов:

struct _3selector{};
struct _4selector{};

И, соответственно, столько же реализаций класса NGon:

template <>
class NGon<_3selector> {/* очень полезный треугольник */};

template <>
class NGon<_4selector> {/* очень полезный четырехугольник */};

Я хочу, чтобы при создании очередной реализации происходила проверка того, что класс наследуется, например, от

class INGon {};

То есть, в следующем случае должна быть ошибка компиляции, так как NGon<_5selector> не наследуется от INGon

struct _5selector{};

template <>
class NGon<_5selector> {/* очень полезный пятиугольник */}; // ошибка компиляции: Я упаль :(

А в случае, когда наследование есть, ошибок быть не должно

struct _6selector{};

template <>
class NGon<_6selector> : INGon {/* очень полезный шестиугольник*/}; // ошибок компиляции нет

Как это можно реализовать?


Ответы (0 шт):