LINUX.ORG.RU

string и библиотечные вызовы.


0

1

Например, пишу я какое-то приложение на плюсах. Использую в нем в качестве контейнера строк класс string. Вроде хорошо же. Но вот нужно мне вызвать stat(). Он string стринг не понимает. Приходится в таких случаях делать .c_str(). И так повсеместно, где всречаются такие вот обращения к системным вызовам с путем или др. строками. Вроде не напрягало по-началу, но что-то с увеличением количества кода стало как-то беспокоить. Особенно, когда производишь порт Си кода на плюсы, Вроде логика вся остается, а писать приходится больше, то тут забыл, то там не тот тип параметра выставил, то тут обертку нужно какую-то лепить... Это нормально? Раньше имел дело с Си, там, конечно, такого нет.

Но вот нужно мне вызвать stat()

Можно использовать готовые плюсовые обёртки вроде бустового Filesystem

Gvidon
()

Но вот нужно мне вызвать stat(). Он string стринг не понимает.

есть два варианта:

  1. написать свой string (можно обёртку к std::string), который имеет operator const char *(), и сам становится строкой (проблема в том, что непонятно, как потом эту строку удалять)
  2. лучше сделать обёртку(обёртки) CFile, как в маздае или там бусте. Что-бы stat например был-бы объектом со свойствами, который создаётся объектом CFile. Ну или там типа того.
emulek
()
Ответ на: комментарий от emulek

есть два варианта:

Есть два стула, на одном работа бесполезная, а на другом работа бесполезная. На какой сам сядешь, на какой джуниора посадишь?

d_a
()

Ок. Обертки, так обертки.

conalex
() автор топика

только toUtf8().const_Data(), только юникод в 21 веке!

bhfq
()
Ответ на: комментарий от Boy_from_Jungle

если у тебя нет поддержки С++11, то .c_str() будет каждый раз аллочить память под С-строку

Это ещё почему?

DarkEld3r
()
Ответ на: комментарий от Boy_from_Jungle

если у тебя нет поддержки С++11, то .c_str() будет каждый раз аллочить память под С-строку

наоборот - практически все реализации хранят в буфере строку уже с нулем в конце

wota
()
Ответ на: комментарий от wota

наоборот - практически все реализации хранят в буфере строку уже с нулем в конце

Сейчас да,
а это я думал это описано в старом стандарте С++, но это было написано у Мейерса по-моему.

Boy_from_Jungle
()
Ответ на: комментарий от wota

С++11 есть. Про буфер знаю, спасибо. Вопрос, скорее, удобства.

conalex
() автор топика
Ответ на: комментарий от conalex

это крутой перец с палкой, которая в фильме светится и издает вжикание.

saibogo
()
Последнее исправление: saibogo (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.