使用typedef和 #define 进行不同的原型设计

Different prototyping with typedef and #define

本文关键字:原型 typedef #define 使用      更新时间:2023-10-16

我正在为一个项目编写一组链表函数。
我需要为列表节点中的数据类型(int/char)提供灵活性

所以我正在尝试做这样的事情:

在主要.cpp

#define INT_DATA
#include "lists.h"
....

在列表.h

#ifdef CHAR_DATA
typedef char DATA_TYPE;
#endif
#ifdef INT_DATA
typedef int DATA_TYPE;
#endif
typedef struct lnode {
    DATA_TYPE data;
    struct lnode* next; //points to the next node
} LNODE;
LNODE * createNewListNode(DATA_TYPE data, LNODE* next);
....

但这一切似乎都不起作用...我不想在原型不同时编写重复的代码。

我做错了什么?这可能吗?

请注意

这是一个练习,我不能使用类,我不能使用任何标准库

这是

C++模板进入的地方。模板允许您创建实现的框架。在这种情况下,您可能需要一个将"数据类型"作为参数的类。听起来不错...下面是它的样子:

template < typename DATA_TYPE >  
struct lnode {
  DATA_TYPE data;
  lnode<DATA_TYPE>* next; //points to the next node
};

然后你可以像这样创建它们:

lnode<char> charNode;
lnode<int> intNode;

不要使用定义。使用模板(好文章:一和二)。

此外,该typedef struct lnode { /* ... */ } LNODE;只是C,甚至不接近C++。