【发布时间】:2010-12-10 14:34:58
【问题描述】:
我正在尝试自学 C++,而我一直使用的传统“新语言”练习之一是实现一些数据结构,例如二叉树或链表。在 Java 中,这相对简单:我可以定义一些类 Node 来维护一个实例变量 Object data,以便有人可以在列表或树的每个节点中存储任何类型的对象。 (后来我使用泛型对其进行了修改;这不是这个问题的意义所在。)
我找不到类似的、惯用的 C++ 方式来存储“任何类型的对象”。在 C 语言中,我会使用 void 指针;显然,同样的事情适用于 C++,但是当我构造std::string 的实例并尝试将其存储到列表/树中时遇到问题(关于从std::string& 到void* 的无效转换)。有没有这样的方法? C++ 是否有相当于 Java 的 Object(或 Objective-C 的 NSObject)?
额外问题:如果没有,并且我需要继续使用 void 指针,那么将 std::string 存储到 void* 中的“正确”方法是什么?我偶然发现了static_cast<char*>(str.c_str()),但这对于我正在尝试做的事情来说似乎有点冗长。有没有更好的办法?
【问题讨论】:
-
为什么这个问题被否决了?
-
我也很想知道 - 我找不到骗子或任何东西......
-
这就像一个老笑话。病人:我这样做的时候很痛。医生:不要那样做。在 C++ 中,不要做“任何事情”的集合。
-
@Jerry Coffin- +1,但需要注意的是,学习之后一切都会发生。在 C++ 中实现一个集合来学习语言结构并没有错,但是当你完成学习后就把它扔掉。
标签: c++ pointers object linked-list