ノードが
template <typename T>
struct node
{
struct node<T> *next;
T data;
};
私のデータ構造には、戻り値の型を持つ多くの関数がありstruct node *
、ユーザーにこの型を不透明として扱いたいと思っています。リンクされたリストの例では、そのような関数はたとえばget_next(struct node<T> *n)
またはinsert_after(struct node<T> *x, struct node<T> *y)
. 非常に少数の関数、つまりnode
s を割り当てたり、フィールドを取得/設定したりする関数だけdata
が、 について何かを知る必要がありT
ます。
「無視」して、ユーザーが気にする必要のない関数T
のようなものとのみ対話できるようにする、より良い方法はありますか? C から来る私の直感的な反応は、 との間でキャストすることですが、それはあまりエレガントに聞こえません。typedef struct node * opaque_handle
T
void*
編集: CygnusX1 のコメントは、私があまりにも多くの保証を回避しようとしていると同時に、型システムにあまりにも多くの保証を求めていることを確信させました。キャスティングと間接化を犠牲にして、 T
be let back に戻ります。void *