假设我正在构建一个链表(实际的数据结构完全不同,但一个链表就足够了),其节点看起来像
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
”并让用户只与typedef struct node * opaque_handle
那些不需要关心的功能进行交互T
?我的直觉反应,来自 C,只是投到和从void*
,但这听起来不是很优雅。
编辑: CygnusX1 的评论让我确信,我在试图规避太多这些保证的同时,我要求类型系统提供太多保证。我将退回到以强制转换和间接T
为void *
代价。