C++模板别名


在 c++ 中进行模板别名有很多是用 #define 实现的,这样可以达到要求,但是在 VisualStudio 2019 中,使用这种方法后,定义的变量在类视图中不能显示出来,通过使用 c++ 标准中的定义可以达到要求。


有这么一个 listnode 的模板类:

template <typename T> struct listnode { //列表节点模板类(以双向链表形式实现)
// 成员
    T data; listnode_posi<T> pred; listnode_posi<T> succ; //数值、前驱、后继
};

现在想用 listnode_posi 作为指向 Listnode 的指针,一般是用 #define 这样定义的:

#define listnode_posi(T) listnode<T>*

这种方法没有报错,也没有对以后产生问题
但是,当我在其他地方使用 listnode_posi(T) 后,比如我定义这样一个模板类:

template <typename T> class list { //列表模板类

private:
    int _size; listnode_posi(T) header; listnode_posi(T) trailer; //规模、头哨兵、尾哨兵
}

在 VS 的类视图-变量中在 list<T> 没有 headertrailer 变量,虽然对于程序是没有影响的

为了解决这个问题,需要在对 listnode<T> 别名时使用 c++ 标准定义:

template <typename T> struct listnode;
template <typename T> using listnode_posi = struct listnode<T>*;

注意,这两句都不能少,至于为什么我现在还不知道……


 上一篇
C++11 关键字 Using C++11 关键字 Using
C++ 里 using 关键字的用法以及和 typedef 的区别:转自: Bitdewy博客 使用小技巧来声明函数指针在 c++03 中, 函数指针要这么写: typedef void (*FunctionPtr)(); 这个声明读
2019-11-19
下一篇 
111 111
2019-11-16 SSM
  目录