C 使用模板为结构定义别名

C++ define alias for a struct using template

本文关键字:结构 定义 别名      更新时间:2023-10-16

使用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>*