gpt4 book ai didi

c++ - 使用模板参数的 typedef 不适用于 g++

转载 作者:太空狗 更新时间:2023-10-29 19:38:37 24 4
gpt4 key购买 nike

以下代码是在 MVCC 下编译的,而不是在 g++ 下编译的,我不确定为什么。

template <typename T>
class A
{
public:
template <typename C>
class B
{
public:
C* cptr;
};

typedef typename A<T>::B<T> Ttype;
};

int main(int argc,char** argv)
{
A<int>::Ttype d;
d.cptr = 0;
}

用g++,你得到

error: 'typename A<T>::B name template<class T> template<class C> class A<T>::B', which is not a type

我正在使用 -std=c++11 进行编译

最佳答案

根据 gcc 错误消息,问题是您声称 A<T>::B是一种类型但它不是:它是一个类模板。两者 gccclang很满意

typedef A<T>::B<T> Ttype;

即删除 typename .在给定的上下文中,不可能专门化 B与它明显不同的东西。

using -alias 用不同的语法做同样的事情:

using Ttype = A<T>::B<T>;

使用额外的符号 template关键字首先说明 B实际上是一个 template然后,结合 typename即实例化B<T>是一种类型:

typedef typename A<T>::template B<T> Ttype;

using Ttype = typename A<T>::template B<T>;

自类模板B无论如何都是本地的,在这种情况下并不真正需要资格,即

typedef B<T> Ttype;

using Ttype = B<T>;

工作也一样。

关于c++ - 使用模板参数的 typedef 不适用于 g++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20551804/

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