Вопрос

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

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

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

Спасибо

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top