Как создать метод класса для возврата подстроки существующего поля класса (тип строки) - PullRequest
0 голосов
/ 04 мая 2020

Я старый самоучка пользователя C & C ++, но сейчас привыкаю к ​​Unicode Strings et c ...!

Используя C ++, я пытаюсь добавить метод к своему класс для возврата подстроки существующего поля класса. Компилятор не позволит мне вернуть подстроку, так как она «временная». Как я могу это сделать? Может быть, в рамках какого-то преобразования макроса?

Определение частичного класса:

#define TFTWDATA_MAXPARTS 20

class TFtwData {
private:
public:
   __fastcall          TFtwData(intiLevel, String   iPath);
   __fastcall          ~TFtwData();
   int       Level;      // Depth
   String    Path;       // Full Path of This File
   int      StartPos[TFTWDATA_MAXPARTS];
   int      Length  [TFTWDATA_MAXPARTS];
   String & GetPathPart(int i) { return Path.SubString(StartPos[i],Length[i]); } ;
};

Конструктор примет заданный путь к файлу и создаст массив пар StartPos / Length определение каждой части имени файла.

Я хочу иметь возможность создать метод, который позволит мне получить доступ к любой части.

Я мог бы создать каждую часть в виде массива String, но это пустая трата пространства.

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Привет Спасибо за ваш ответ.

Я попробовал это, и добавление const изменило мою ошибку в предупреждение. Подпрограмма noe либо ничего не делает, либо вылетает.

Скажем, я вижу, что функция SubString создает свой результат в стеке, который затем может быть немедленно использован / уничтожен.

Если я изменю подпрограмму для сохранения вывода из SubString в stati c String, все будет работать нормально.

Единственная проблема с этим заключается в том, что данные будут переопределены при следующем вызове. Я думаю, я мог бы создать массив из 100 строк c строк и использовать их по очереди, возможно, это сработало бы. (Полагаю, мне нужно всего лишь достаточно для обработки максимального количества вызовов в одной инструкции - ie сравнение может использовать 2 вызова для завершения этого?)

Я нигде не вижу внутри метода SubString, поэтому не знаю, как это работает.

Любые лучшие идеи о том, как этого добиться

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

Есть идеи получше, как этого добиться

0 голосов
/ 04 мая 2020

Посмотрите объявление String::SubString и повторите тип возврата

const String& GetPathPart(int i) {
  return Path.SubString(StartPos[i], Length[i]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...