通过using指令将私有继承的内部模板公开
Making a private inherited inner template public via a using directive
我正试图使用using
指令来引入派生类的public
访问声明——在库中声明的某个内部类模板。代码:
template <typename T>
class Base
{
public:
template<typename U>
struct Inner;
};
template<typename T>
class Derived: private Base<T>
{
public:
using typename Base<T>::template Inner; // make it visible
Inner<T>* ptr; // no need for typename here, non-qualified name
};
int main() {}
g++和clang++都没有编译这个代码,都抱怨
错误:在"template"之前需要不合格的id
据我所知,Inner
是一个依赖模板名称,因此在限定其名称时应该使用::template
,之前也应该使用typename
,因为Base<T>::Inner
是依赖类型。我已经尝试了所有可能的有/没有typename/template
的组合,但都没有编译。有没有办法在Derived
的public
部分使用Inner
?
不可能。使用声明是,来自[namespace.udcl]:
using
typename
opt嵌套名称说明符不合格id
但是不合格的id不能是类模板。
你可以改成一个别名:
template<typename T>
class Derived: private Base<T>
{
public:
template <typename U>
using Inner = typename Base<T>::template Inner<U>;
Inner<T>* ptr;
};
相关文章:
- 继承函数的重载解析
- 将函数类成员映射到类本身内部
- 继承期间显示未知行为的子类
- 头文件-继承c++
- 为什么在保护模式下继承升级不起作用
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- Boost Spirit,获取迭代器内部语义动作
- 虚拟继承的内部机制
- 返回自身内部的双重嵌套类的成员函数,该类继承自从自身继承的类
- include_directory CMake内部的继承?
- C 如果实际上是继承了类,则内部发生了什么
- 调用模板函数内部的继承方法
- c++中的继承,内部输出
- 纯虚类(接口)和继承它的对象的内部数组分配
- 使用继承构造函数时,VS2015内部编译器错误
- 如何在类内部的多重/多层继承中访问基类调用
- 重新定义派生类的继承内部函数以对基类产生影响
- 使用内部类型作为模板参数继承模板类
- 通过using指令将私有继承的内部模板公开