You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在子类中使用模板基类的嵌套类型?

问题

我有如下代码:

template <typename T>
struct bar
{
        typedef T type;
};

template <typename T>
struct sub_bar : bar<T>
{
        typename bar<T>::type x;
};

我知道这是推荐写法,但我想写成如下形式:

template<typename T>

struct sub_bar : bar<T>

{
        ...

        type x;

};

该如何实现?我尝试了如下写法:

template<typename T>

struct sub_bar : bar<T>

{
        typedef typename bar<T>::type type;

        type x;

};

这里的type是否存在歧义?不过这段代码在gcc9编译器中可以正常运行。

解答

你尝试的写法是可行的,这里的type不存在歧义。

当你在sub_bar内部定义typedef typename bar<T>::type type;时,这个type属于当前类的作用域。在类内部直接使用type时,编译器会优先查找当前类作用域的名字,不会去基类bar<T>中查找——除非你明确使用this->或者基类限定符。因此代码里的type x;会被解析为你在sub_bar中定义的类型别名,和基类的type不会产生冲突,gcc9能正常编译是符合C++标准的。

另外,C++11及以后还可以用using语法简化写法,直接将基类的type引入当前类作用域,效果完全一致:

template<typename T>
struct sub_bar : bar<T>
{
        using typename bar<T>::type;
        type x;
};

这种写法无需重新定义类型别名,代码更简洁直观。

内容的提问来源于stack exchange,提问作者Սոկրատ Գալստյան

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 04:27:12