C 使用模板为结构定义别名
C++ define alias for a struct using template
使用C 语言:我做了一个通用的结构,我想给它一个别名,但失败了!这是代码:
template<class T>
struct noeud {
T val;
struct noeud *next;
};
typedef struct noeud * Noeud;
这是错误:
" struct noeud"所需的模板参数在';'之前的声明中无效类型令牌构建:2个错误(S),0警告
您可以使用C 11修订中引入的语法来实现这一目标:
template<class T>
struct Node;
template <class T>
using NodePtr = Node<T>*;
您应该远离裸指针并使用智能指针,例如unique_ptr
:
template <class T>
using NodePtr = std::unique_ptr<Node<T>>;
应该是
typedef struct noeud<your type>* Noeud;
您的类型是您希望使用
如果要将另一个模板作为别名,则必须使用using
关键字:
template<typename T>
using AliasName = noeud<T>*;
添加到其他答案中:
类
noeud
是一个模板,因此需要一个模板参数才能成为一种类型,因为在编译时推导了模板类型。例如:template<class T> struct noeud { T val; //noeud* next // Error: compiler doesn't know what a noeud is. noeud<T>* next; // Need to specify template parameter (T can be used). }; typedef noeud<int>* Noeud; // Need to specify template parameter.
在C 中,当没有歧义时,在声明" structs"/聚集类时,您不必将关键字
struct
放在类型的前面。在C 中,关键字struct
表示 class 带有默认访问说明符设置为 public 。正如他人提到的,在 c 11 中,您可以使用
using
语法来声明模板的别名(typedef
di di dim dim 允许模板别名),例如:template<typename T> using noeud<T>* Noeud; // Use 'using' to create an alias in same manner as typedef.
这使您可以使用别名为:
Noeud<int> n; // Type is: noeud<int>*
相关文章:
- 我的超类中的模板问题与结构定义
- 为私有结构定义双参数运算符重载
- 可视化C++中的结构定义错误
- 如何在结构定义中组合__attribute__((dllexport))和[[nodiscard]]?
- COM 互操作结构定义与内存布局不匹配
- C 在标题文件中创建具有结构定义的结构的队列
- 如何将结构定义为结构的成员
- 在这个节点定义中,为什么我们在结构定义之后使用"Node"?
- 不同模块中的ambigus结构定义
- 有条件的C/C 结构定义
- C++ 初始化结构定义中的向量
- 字符串声明中的结构定义中的字符串声明
- 使用结构定义函数
- 为具有许多数据成员的结构定义 == 和<
- enableif结构定义和默认模板参数
- C 使用模板为结构定义别名
- C/C++ 中的套接字编程 - 接收由 typedef 结构定义的消息
- 为C++结构定义显式析构函数如何影响调用约定
- 当结构定义在头文件中时,如何在main()中创建结构数组
- C结构定义标准