У меня есть базовый классC++ проверка наследование во время компиляции
template<typename T>
class Base {};
и несколько производных классов:
class DerivedInt : public Base<int> {}
class DerivedDummy : public Base<Dummy> {}
// where Dummy is some user-defined concrete type
template<typename E>
class DerivedGeneric : public Base<E> {}
Я хотел бы написать функцию f<DerivedType>::value
типа признака, которая возвращает истину только тогда, когда существует тип T
такой, что DerivedType
наследуется от Base<T>
.
Я чувствую, что SFINAE - это путь ... но я не слишком хорошо знаком с метапрограммированием черной магии. Благодаря!
По какой-то причине я не могу использовать эту функцию типа в 'enable_if'. Что-то вроде 'typename std :: enable_if(), void> :: type' дает мне аргумент шаблона 1 недействителен. –
@JimJarvis: работает с ':: value' ([demo] (http://ideone.com/hIUR5N)) – Jarod42
или с' {} '([Demo] (http://ideone.com/j8VOrK)) , Кажется, что '()' вводит досадный синтаксический анализ. – Jarod42