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

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

main.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);
....

但所有这些似乎都行不通...
当原型(prototype)不同时,我不想写重复的代码。

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

请注意

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

最佳答案

这是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;

10-08 03:51