Могу ли я указать, что аргументы шаблона должны быть подклассами некоторого базового класса? - PullRequest
1 голос
/ 14 апреля 2011

У меня есть класс, предназначенный для работы с определенным типом параметров.Есть ли способ, которым я могу обеспечить, чтобы параметр шаблона был указателем на подкласс некоторого типа?

1 Ответ

8 голосов
/ 14 апреля 2011
#include <type_traits>
#include <utility>

struct B { };
struct D : B { };

template <typename T>
struct S {
    typedef typename std::enable_if<std::is_base_of<B, T>::value>::type check;
};

int main()
{
    S<B> x;   // Ok!
    S<D> y;   // Ok!
    S<int> z; // Not ok!
}

Утилита enable_if и черта типа is_base_of являются частью стандартной библиотеки C ++ 0x, но обе доступны и в Boost.

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