我对 C++ 比较陌生,我的背景是 Java。我必须将一些代码从 Java 移植到 C++,并且对 Java 对象类产生了一些疑问。所以,如果我想移植这个:
void setInputParameter(String name, Object object) { ..... }
我相信我应该使用 void* 类型或模板,对吗?我不知道完成它的“标准”程序是什么。
谢谢
这取决于你想做什么object
。
如果您使用模板,那么您调用的任何方法object
都将在编译时绑定到object
s 类型。这是类型安全的,并且更可取,因为对对象的任何无效使用都将被标记为编译器错误。
您还可以传递 avoid *
并将其转换为所需的类型,假设您有某种方式知道它应该是什么。这更危险,更容易受到代码中的错误的影响。您可以通过dynamic_cast<>
启用运行时类型检查使其更安全一些。
如果你想接受一个指向任意对象的指针,那么你会希望类型为void *
. void *
但是,这将是函数的结尾,除了存储它的值或将其转换为指向某个已知对象的指针之外,您不能做任何事情。如果你无论如何都要转换它,那么你可能知道对象是什么,所以你不需要void *
.
C++ 只是没有 Java 所具有的那种自省能力。换句话说,没有一种方便的方式来表达类似myObject.getClass().getName()
. 我知道的最接近的事情是运行时类型信息 (RTTI),您可以在此处看到它的运行情况。
另一种选择是创建自己的根类,并编写自己的内省方法(很多 C++ 框架都这样做)。