Мне интересно, есть ли способ выяснить, является ли класс прямой базой другого класса, т. Е. В терминах черты типа Boost функция is_direct_base_of
. Насколько я могу судить, Boost, похоже, не поддерживает такую функциональность, что заставляет меня думать, что это невозможно с текущим стандартом C ++.
Причина, по которой я хочу, состоит в том, чтобы выполнить некоторую проверку правильности двух макросов, которые используются для системы отражения, чтобы указать, что один класс является производным от другого, как в примере кода ниже.
header.h:
#define BASE A
#define DERIVED B
class A {};
class B : public A
{
#include <rtti.h>
};
rtti.h:
// I want to check that the two macro's are correct with a compile time assert
Rtti<BASE, DERIVED> m_rtti;
Хотя макросы кажутся ненужными в этом простом примере, в моем реальном сценарии rtti.h
намного сложнее.
Одним из возможных способов было бы сравнить размер указателя this с размером указателя this, приведенного к базовому типу, и каким-то образом попытаться выяснить, является ли размер базового класса сам по себе или что-то в этом роде. (Да, ты прав, я тоже не знаю, как это сработает!)