Метод класса C ++ для возврата разных типов

У меня есть метод в классе, который возвращает вектор строк. Достаточно просто. Но, скажем, иногда я хочу, чтобы вся строка возвращалась без разбора? Но используя тот же метод.

Так как метод, который получает данные, довольно сложен, я в настоящее время использую метод для возврата необработанной строки, а затем анализирую ее в вектор в main, если нужно. Или, если хотите, можете продублировать метод просто с другим типом возврата.

Есть ли более элегантный способ сделать это с помощью одного метода?

-1

Решение

Извините, ребята, сразу после публикации я разобрался, как это сделать. Сделайте сложный метод, который получает данные закрытыми, настройте два открытых метода, которые его вызывают, и верните разные типы. Цель состояла в том, чтобы не допустить преобразования из набора строк в вектор вне основного. Буду прятаться в классе.

Иногда это помогает говорить о проблемах. Работаю над этим в одиночку и не с кем поговорить.

Спасибо, ребята, хотите верьте, хотите нет, вы помогли, даже не подозревая об этом. 🙂

1

Другие решения

Как правило, невозможно иметь две функции с одинаковым именем, которые отличаются только типом возвращаемого значения. В узком смысле я вижу следующие основные возможности обойти это ограничение:

  • Общее решение для такого рода проблем состоит в том, чтобы ссылаться в качестве аргументов, которые изменяются как побочный эффект функции. Фактическое возвращаемое значение — это простое число или целое число, указывающее успех. Здесь вы должны передать ссылку на изначально пустой вектор; была ли строка проанализирована и разбита или нет, будет указано логическим возвращаемым значением, а результаты синтаксического анализа — если это произойдет — будут помещены в ссылочный вектор.
  • Вернуть вектор как прежде; пустой вектор будет означать, что разбор не произошел. Это решение подразумевает, что необработанная строка доступна вызывающей стороне, например, потому что получение строки и ее анализ были разделены на две функции.

В более широком смысле это просто проблема дизайна, как вы только что обнаружили. Вы можете получать, проверять и — только если проверка показывает, что это необходимо — анализировать данные в отдельных шагах, чтобы вы знали, какую функцию вызывать и что делать с данными в каждой точке. Разделяй и властвуй, Дао программирования.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector