#c #crtp
Вопрос:
template<template<typename>class Derived>
class Base{
public:
void interface(){
static_cast<Derivedamp;>(*this).something();
}
};
template<typename T>
class Derived:public Base<Derived> {
...
};
Производному требуется один параметр шаблона, но я использую только безымянный параметр для класса, полученного в базе.
Могу ли я использовать этот синтаксис?
Что я исправляю?
Как я могу получить доступ к производным в базе?
могу ли я добавить, используя dType = производное имя типа::введите в базу? в gcc версии 10.2 я получил такие ошибки;
test.cpp: In instantiation of 'class Base<Derived<int> >':
test.cpp:22:7: required from 'class Derived<int>'
test.cpp:30:24: required from here
test.cpp:13:9: error: invalid use of incomplete type 'class Derived<int>'
13 | using dType = typename derived::Type;
| ^~~~~
test.cpp:22:7: note: declaration of 'class Derived<int>'
22 | class Derived:public Base<Derived<T>>{
Я просто добавляю, используя dType = Производный::Введите свой код.
Комментарии:
1.
Base
Действительно ли должен быть «шаблон шаблона»?2. Нет, я просто хочу знать, законно ли это и полезно ли
Ответ №1:
Вы можете просто явно указать имя параметра шаблона внутри Derived
:
template<typename Derived>
class Base{
public:
void interface(){
typename Derived::type some_variable;
static_cast<Derivedamp;>(*this).something();
}
};
template<typename T>
class Derived:public Base<Derived<T>> {
public
using type = T;
...
};