Из класса Java Object в C ++ - PullRequest
       13

Из класса Java Object в C ++

3 голосов
/ 16 апреля 2010

Я новичок в C ++, и мой опыт работы на Java. Мне нужно перенести некоторый код с Java на C ++, и возникли некоторые сомнения относительно класса Object Java. Итак, если я хочу портировать это:

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

Полагаю, мне следует использовать тип void * или шаблоны, верно? Я не знаю, что такое «стандартная» процедура для ее достижения.

Спасибо

Ответы [ 2 ]

2 голосов
/ 16 апреля 2010

Это зависит от того, что вы хотите сделать с object.

Если вы используете шаблон, то все методы, которые вы вызываете на object, будут связаны во время компиляции с типом object s. Это безопасный тип, и он предпочтителен, так как любое неправильное использование объекта будет помечено как ошибки компилятора.

Вы также можете передать void * и привести его к желаемому типу, предполагая, что у вас есть какой-то способ узнать, каким он должен быть. Это более опасно и более подвержено ошибкам в вашем коде. Вы можете сделать его немного безопаснее, используя dynamic_cast<>, чтобы включить проверку типов во время выполнения.

1 голос
/ 16 апреля 2010

Если вы хотите принять указатель на произвольный объект, то вы бы хотели, чтобы тип был void *. Однако это будет конец функции, вы ничего не можете сделать с void *, кроме как сохранить его значение или привести его к указателю на некоторый известный объект. Если вы все равно собираетесь его разыграть, то, вероятно, знаете, что это за объект, поэтому вам не нужен void *.

C ++ просто не обладает теми же возможностями интроспекции, что и Java. Другими словами, нет удобного способа сказать что-то вроде myObject.getClass().getName(). Самая близкая вещь, о которой я знаю, это информация о типе времени выполнения (RTTI), которую вы можете увидеть в действии здесь .

Другая альтернатива - создать собственный корневой класс и написать свои собственные методы самоанализа (многие платформы C ++ делают это).

...