Проверка во время компиляции, является ли базовый класс «интерфейсом»

После того, как выяснилось, что то, что я изначально хотел, вероятно, невозможно без использования C++11, я хочу немного изменить требование и спросить вас, можно ли этого достичь.

предыдущий вопрос

По сути, я хочу проверить во время компиляции, наследуется ли класс от "интерфейса". Под интерфейсом я подразумеваю класс только с чисто виртуальными методами. Я хотел бы сделать следующий код:

template 
class Impl : public T {
public:
STATIC_ASSERT_INTERFACE(T);
};

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

Кто-нибудь может придумать что-то подобное?

6
задан Community 23 May 2017 в 11:55
поделиться