问题描述
template<template<typename>class Derived>
class Base{
public:
void interface(){
static_cast<Derived&>(*this).something();
}
};
template<typename T>
class Derived:public Base<Derived> {
...
};
Derived 需要一个模板参数,但我只对 Base 中的 Derived 类使用未命名参数。 我可以使用这种语法吗? 我修什么? 如何在 Base 中访问 Derived?
我可以在 base 中使用 dType = typename Derived::type 添加吗?在 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>>{
我只是在您的代码中添加 using dType = Derived::Type。
解决方法
您可以直接在 Derived
内为模板参数指定一个名称:
template<typename Derived>
class Base{
public:
void interface(){
typename Derived::type some_variable;
static_cast<Derived&>(*this).something();
}
};
template<typename T>
class Derived:public Base<Derived<T>> {
public
using type = T;
...
};