gpt4 book ai didi

c++ - 嵌套类中的别名模板

转载 作者:搜寻专家 更新时间:2023-10-31 00:39:20 26 4
gpt4 key购买 nike

我正在尝试为 T2<B> 获取模板别名从 C 的一个实例开始。

template<typename A>
struct T1
{
template<typename B>
struct T2{};
};

template<typename A>
class C
{
T1<A> t;
};

template<typename A>
using U1=decltype(C<A>::t);

template<typename A, typename B>
using U2=typename U1<A>::T2<B>;

我在使用 gcc 4.8 时遇到编译器故障:

gg.cc:18:28: error: expected ‘;’ before ‘<’ token
using U2=typename U1<A>::T2<B>;

我在每个合理的位置都使用了 typename 关键字,但无法编译 U2 定义。

这里正确的语法是什么?如果我能在不求助于 U1 的情况下获得 U2 的定义,那就更好了。

最佳答案

您需要使用 template消歧器告诉编译器解析 T2作为模板的名称(以及后续的 <> 作为相应模板参数的分隔符):

    template<typename A, typename B>
using U2=typename U1<A>::template T2<B>;
// ^^^^^^^^

这是一个编译 live example .

Here您可以找到有关何时应使用 template 的更多信息消歧器(还有 typename 消歧器,尽管您似乎知道那个消歧器)。

关于c++ - 嵌套类中的别名模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16316248/

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