3

我对 C++ 比较陌生,我的背景是 Java。我必须将一些代码从 Java 移植到 C++,并且对 Java 对象类产生了一些疑问。所以,如果我想移植这个:

void setInputParameter(String name, Object object) { ..... }

我相信我应该使用 void* 类型或模板,对吗?我不知道完成它的“标准”程序是什么。

谢谢

4

2 回答 2

2

这取决于你想做什么object

如果您使用模板,那么您调用的任何方法object都将在编译时绑定到objects 类型。这是类型安全的,并且更可取,因为对对象的任何无效使用都将被标记为编译器错误。

您还可以传递 avoid *并将其转换为所需的类型,假设您有某种方式知道它应该是什么。这更危险,更容易受到代码中的错误的影响。您可以通过dynamic_cast<>启用运行时类型检查使其更安全一些。

于 2010-04-15T20:46:34.360 回答
1

如果你想接受一个指向任意对象的指针,那么你会希望类型为void *. void *但是,这将是函数的结尾,除了存储它的值或将其转换为指向某个已知对象的指针之外,您不能做任何事情。如果你无论如何都要转换它,那么你可能知道对象是什么,所以你不需要void *.

C++ 只是没有 Java 所具有的那种自省能力。换句话说,没有一种方便的方式来表达类似myObject.getClass().getName(). 我知道的最接近的事情是运行时类型信息 (RTTI),您可以在此处看到它的运行情况。

另一种选择是创建自己的根类,并编写自己的内省方法(很多 C++ 框架都这样做)。

于 2010-04-15T20:52:48.130 回答