gpt4 book ai didi

c++ - 指向具有模板成员的结构的不透明指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:12:54 24 4
gpt4 key购买 nike

假设我正在构建一个链表(真正的数据结构是完全不同的,但链表足以解决这个问题),其节点看起来像

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 的我的直觉 react 只是在 void* 之间转换,但这听起来不是很优雅。

编辑 CygnusX1 的 comment让我确信我在试图规避太多这些保证的同时要求类型系统提供太多保证。我会回到让Tvoid *以转换和间接为代价。

最佳答案

虽然你不关心什么T是,你最想将它与不同类型区分开来 - 比如 U ,不是吗?您可能希望以下内容引发错误:

node<T>* elem1 = ...
node<U>* elem2 = ...
elem1 = elem2

有几种方法可以在不牺牲类型检查或运行时性能的情况下简化代码:

  • 如果您使用 C++11,请考虑使用 auto而不是在使用函数时明确命名类型
  • 如果node<T>在你的代码中很常见,你可以设置一个全局范围 typedef

另请注意,在 node<T> 的上下文中定义,使用普通的 node (没有模板参数)是允许的。

如果你真的想隐藏node的内容, 考虑实现 pimpl mvidelgauz 建议的模式。

关于c++ - 指向具有模板成员的结构的不透明指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38031196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com