[C++] string + int + string

SCIF32

Есть код, который делает:

int A;
string S;

A=1123232;

S="ku ku ku";
S+=A;
S+="be be be";

Хотелось бы написать операции сложения компактно и в одну строку, что-то вроде:
S="kukuku" + A + "be be be";
Можно ли как-нибудь сделать это стандартным способом?
// использовать stringstream запрещено

okunek

string operator+ (int i, const string &s)
{
...
}
string operator+ (const string &s, int i)
{
...
}

SCIF32

Спасибо, думал об этом.
Странно что подобные функции не включены в реализацию STL, может здесь есть какие-нибудь грабли?

okunek

Ну имхо перегрузка операторов для встроенных типов и STL-классов - это не есть гуд.
И в данном случае сложение стринга и инта может иметь кучу смыслов, помимо сложения строки и строкового представления инта.
Поэтому такие перегрузки в STL-е - просто бессмыслица.
К тому же чем больше таких перегруженных операторов возникнет в коде, тем больше шанс в каком-нибудь месте наебнуться из-за того, что ты опечатался, а компилятор будет молчать как партизан.

agent007new

stringstream для этого есть

Andbar

stringstream для этого есть
// использовать stringstream запрещено

Realist

Например, грабля в том, что на char* + int ты получишь совсем другой эффект.

amkharchenko

Amusingly, the history of the evolution of C++ over time can be described as a history of trying to plug the leaks in the string abstraction. Why they couldn't just add a native string class to the language itself eludes me at the moment.

http://www.joelonsoftware.com/articles/LeakyAbstractions.htm...

agent007new

// использовать stringstream запрещено

Это ж кто тебе запрещает его использование?

SCIF32

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

smit1

int A;
string S;
A=1123232;
S="ku ku ku";
S+=A;
S+="be be be";
Хотелось бы написать операции сложения компактно и в одну строку
Код, семантически эквивалентный данному, выглядит так:
std::string S = std::string("ku ku ku") + static_cast<char>(A) + "be be be";
(Хотелось бы обратить внимание аффтара, что выражение S+=A; не переводит A в строковое представление, а рассматривает его как код символа, который надо добавить к строке).
Если же хочется таки перевести A в строчку, и душит жаба пользоваться stringstream / strstream / itoa etc, то надо заюзать готовый врэппер типа boost::lexical_cast (ну или написать свой и песать что-то типа:
std::string S = std::string("ku ku ku") + boost::lexical_cast<std::string, int>(A) + "be be be";

agent007new

А блин, не заметил - у тебя он закомментирован был
Оставить комментарий
Имя или ник:
Комментарий: