3

プロジェクト用の一連のリンク リスト関数を作成しています。
リスト ノードのデータ型 (int/char) に関して柔軟性を提供する必要がある

だから私は次のようなことをしようとしています:

main.cpp で

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

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

しかし、これはすべて機能していないようです...プロトタイプだけが異なる場合、重複したコードを記述したくありません..

私は何を間違っていますか?これは可能ですか?

ご注意ください

これは演習です。クラスは使用できません。標準ライブラリは使用できません。

4

2 に答える 2

9

ここに 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;
于 2012-04-14T21:20:32.747 に答える
2

定義を使用しないでください。テンプレートを使用します (良い記事: onetwo )。

また、それtypedef struct lnode { /* ... */ } LNODE;は単なる C であり、C++ に近いものでもありません。

于 2012-04-14T21:21:25.063 に答える