gpt4 book ai didi

c++ - 通过 using 指令公开私有(private)继承的内部模板

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:18:35 25 4
gpt4 key购买 nike

我正在尝试使用 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++ 都不编译这段代码,都提示

error: expected unqualified-id before 'template'

据我所知,Inner是一个依赖模板名称,所以应该使用 ::template在限定其名称时,还有一个 typename之前,因为Base<T>::Inner是依赖类型。我已经尝试了所有可能的组合,有/没有 typename/template ,并且没有编译。有什么方法可以使用 InnerpublicDerived

最佳答案

不可能。 using-declaration 来自 [namespace.udecl]:

using typenameopt nested-name-specifier unqualified-id ;

但是 unqualified-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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com