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)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.