В поисках решения, такого как EvalDelay, ниже, чтобы исправить проблему неопределенного типа, EvalDelay - моя попытка решить проблему, но без работы
Поскольку черты проверяются в базовом классе производного, производное все еще не определено. Вопрос в том, какзадержать оценку с помощью какого-то шаблона магии
Проверка черт здесь проста, это просто основа проверки.
struct Base{};
template<class T_Type>
struct T_CheckTrait
{
static const bool bVal = std::is_base_of_v<Base, T_Type>;
};
template<class TypeToDelay, class T = Next>
struct EvalDelay
{
//using type = std::add_volatile<TypeToDelay>;
//using type = typename type_identity<TypeToDelay>::type;
using type = TypeToDelay;
};
template<class T_Derived>
struct RexBase
{
using T_TypeDly = typename EvalDelay<T_Derived>::type;
static const bool bVal = T_CheckTrait<T_TypeDly>::bVal;
};
struct Rex:RexBase<Rex>{ };
void Main
{
Rex Obj; //and on compilation i get error undefined type, not here but in templates above
}
Не компилируется, потому что я пытаюсь проверить черты Rex в его базовом классе во время компиляции.
Ищем магии шаблонов, чтобы задержать оценку
std:: add_volatile задерживает оценку, как показано в EvalDelay, но задерживает ее до времени выполнения, ищет оценку времени компиляции, но задерживается.
Спасибо