C ++ - 如何typdef模板化结构指针?

时间:2018-02-17 18:04:33

标签: c++ templates struct

这是我的代码:

#include<iostream>
using namespace std;

template<typename T>
struct Doublenode{
    T data;
    struct Doublenode<T>* prev;
    struct Doublenode<T>* next;
};
template<typename T>
using Double_node = typename Doublenode <T>::Double_node;
template<typename T>
using DoubleNodePtr = typename Double_node <T>* ::DoubleNodePtr;

这给了我以下错误:

  

错误:预期的嵌套名称说明符    使用DoubleNodePtr = typename(^)Double_node * :: DoubleNodePtr;

设计模板化结构指针的正确方法是什么?

3 个答案:

答案 0 :(得分:1)

using类型别名的语法,无论是否模板化,如下所示:

using <alias name> = <existing type name>;

您正在将其编写为

using <alias name> = <existing type name> :: <alias name>;

如果<existing type name>的成员类型名为<alias name>可以正常工作。但总的来说它不正确。最终,你的问题似乎是误解了所需的语法。哪个适用于您的帖子只是:

template<typename T>
using Double_node = Doublenode<T>;

答案 1 :(得分:1)

template<typename T>
using DoubleNodePtr = typename Double_node <T>* ::DoubleNodePtr;

指针类型没有成员或范围,因此您无法在指针上应用范围解析运算符。

template<typename T>
using Double_node = typename Doublenode <T>::Double_node;

Doublenode没有名为Double_node的成员,因此只有在您打算专门化Doublenode并且这些专业化有该成员时,这才是明智的。

  

C ++ - 如何设计模板化的结构指针?

像这样:

template<typename T>
using DoubleNodePtr = Double_node<T>*;

但是,为指针创建类型别名通常是个坏主意。不要这样做。

答案 2 :(得分:0)

template<typename T>
using Double_node = Doublenode<T>;

template<typename T>
using DoubleNodePtr = Double_node<T>*;