繁体   English   中英

使用void *作为Java Object的C ++等价物

[英]Using void* as C++ equivalent of Java Object

我正在尝试创建一个包含void*std::vector的类。 有人告诉我, void*是C ++相当于Java中的Object 由于这是用Java编写的程序的C ++端口,因此它应该在理论上起作用。

Java的:

ArrayList<Object> list;

C ++:

vector<void*> list;

这将无法编译,给出错误:“'reference':非法使用'void'类型”。

void*是否真的是Java的Object的C ++等价Object 我用错了吗?

Java Object是一个基本的基类,它为所有Java类提供了一些公共属性。

在C ++中没有这样的东西。 如果要设计多态层次结构,可以设计自己的基类MyBaseClass (抽象与否),然后设计派生类。

因此,创建vector<void*>容器在技术上是可行的,但它没有意义。 对于正确的软件设计,您需要的是设计基类MyBaseClass ,以便您能够创建vector<MyBaseClass*>容器。

指向void的指针意味着你有一些内存地址,但你不知道那是什么类型的东西。 您可以使用任何类型的指针创建向量,然后在向向量中添加项时,可以将指针强制转换为在向量声明中使用的任何指针。 这很好但它会在语法上起作用。 不利的一面是你不知道向量中有哪些数据项。

两点都是对的。

  1. void*不是Object的C ++等价Object
    在C ++中没有等价物。
  2. 你以错误的方式使用它 - 你正在解引用向量中的元素。

由于您没有提供有关您想要完成的任何信息,因此无法就您应该做什么提供任何建议。

  1. void* vs Object 这些当然不是等价物, void*变量包含没有类型的内存地址(它没有方法也可以指向基元), Object变量是Object引用 ,它是Object类的一个实例或者它的一个子类-classes(因此有一些方法,多态性的可能性,并且不能引用基本类型)。

    比较可能意味着如果在c ++中你想要存储任何类的对象,你将得到一个void*然后在评估时根据需要进行转换。 通过这种方式,他们可以做一些相同的事情。

  2. 编译错误可能是由于您在创建列表后所做的事情,因为解释后的void*不能被视为Object

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM