原始指针但现代方式

Raw pointer but modern way

我的项目中必须有一个语义堆栈,它将在其中保存多种类型。
我的目标是让我的项目使用现代 C++。
拥有任何类型堆栈的正确方法是什么?
java 中的等效版本是 Stack<Object>
以下哪些是正确的?

  1. 使用void*并将其转换为我想要的类型。
  2. 类似于 1 但使用了一些智能指针。 (我不知道是什么)
  1. std::any 用于存储 any 类型的对象(可能有限制)。

然而,存储任何类型的整个设计很少是理想的。通常,最好使用可变参数模板将多态性完全保留在编译时,或者只使用一组有限的类型 (std::variant),甚至使用 OOP 层次结构。哪个更合适取决于用例。

void* 指针是纯 C 的东西,在 C++ 中已过时。 当您为 objects/variables/members 动态分配内存时,您可以使用智能指针(例如 unique_ptr 或 shared_ptr)。不要在智能指针对象中包裹一些不是你创建的API指针对象。当您将参数传递给函数并且需要避免复制对象时,您最好使用 references 而不是指针。但是,您可以在 C++ 中使用原始指针,但不建议这样做。