我正在尝试使用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++都不编译此代码,都提示
据我所知,
Inner
是一个从属模板名称,因此,在限定其名称时应使用::template
,并且在使用typename
之前也应使用Base<T>::Inner
,因为typename/template
是从属类型。我尝试了所有可能的组合,包括/不带Inner
,并且都没有编译。有什么方法可以在public
的Derived
部分使用ojit_code吗? 最佳答案
不可能。使用声明来自[namespace.udecl]:
但是,不合格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++ - 通过using指令公开私有(private)继承的内部模板,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30492993/