Здравствуйте, astral_marine, Вы писали:
_>_>#define _S(msg) (((std::basic_ostringstream<TCHAR>&)(((std::basic_ostringstream<TCHAR>&)std::basic_ostringstream<TCHAR>()) << msg)).str())
_>#define _SA(msg) (((std::basic_ostringstream<char>&)(((std::basic_ostringstream<char>&)std::basic_ostringstream<char>()) << msg)).str())
_>#define _SW(msg) (((std::basic_ostringstream<wchar_t>&)(((std::basic_ostringstream<wchar_t>&)std::basic_ostringstream<wchar_t>()) << msg)).str())
_>
_>_>float a = 1.1;
_>SetError(_S("Ошибка в файле: " << FILE_NAME << 12 << 12.16 << a));
_>
_>Код работает в Visual C++ 6.0, 2003
Что-то ошибку выдаёт:
main.cpp(51): error C2514: 'std::basic_ostringstream<_Elem,_Traits,_Alloc>' : class has no constructors
with
[
_Elem=char,
_Traits=std::char_traits<char>,
_Alloc=std::allocator<char>
]
Здравствуйте, bolshik, Вы писали:
B>Здравствуйте, Аноним, Вы писали:
А>>Посоветуйте какой-нибудь кроме буста и такой чтобы можно было в одну строчку, т.к. _itoa тут не примениш...
B>B>namespace std {
B> string& operator+(string& s, int i) {
B> ostringstream os(s);
B> os.seekp(s.size(), ios_base::beg);
B> os << i;
B> s = os.str();
B> return s;
B> }
B>}
B>
Добавлять в пространство имён std что-либо, кроме специализаций шаблонов для пользовательских типов, запрещается пунктом 17.4.3.1/1 Стандарта. operator+ не является шаблоном, а std::string и int не являются пользовательскими типами, поэтому данный код вызывает неопределённое поведение.
Здравствуйте, astral_marine, Вы писали:
_>_>#include <sstream>
_>
Точно