Страница 1 из 2
Почему один протип работает в "цепной" форме, а другой - нет?
Добавлено: 06 ноя 2015, 10:08
Сионист
Код: Выделить всё
std: :o fstream &operator << (std: :o fstream &Stream , const std::wstring &String);
...
std: :o fstream &operator << (std: :o fstream &Stream , const std::wstring &String)
{
...
return Stream;
}
...
std::wstring s;
std: :o fstream L;
L<<s; // работает
L<<"sdfagfs"<<s<<"dfsfggfsd";// Не работает, запускается стандартная версия вместо перегруженной.
Код: Выделить всё
std: :o stream &operator << (std: :o stream &Stream , const std::wstring &String);
...
std: :o stream &operator << (std: :o stream &Stream , const std::wstring &String)
{
...
return Stream;
}
...
std::wstring s;
std: :o fstream L;
L<<s; // работает
L<<"sdfagfs"<<s<<"dfsfggfsd";// Работает
Почему?
Re: Почему один протип работает в "цпной" форме, а другой - нет?
Добавлено: 23 ноя 2015, 11:46
Din666
ну для начала литера 'L' зарезервирована, чтобы создавать переменные типа wchar_t
например const std::wstring aaa = L"bbb";
поэтому чтобы избежать путаницы, лучше переименовать переменную L на другую.
чтобы вызывалась требуемая перегрузка в данном случае надо явно указать тип.
L<<std::wstring(L"sdfagfs");
а еще более правильно не путать вместе wchar_t и char, и юзать std::wofstream
Re: Почему один протип работает в "цпной" форме, а другой - нет?
Добавлено: 24 ноя 2015, 08:25
Сионист
Din666 писал(а):ну для начала литера 'L' зарезервирована, чтобы создавать переменные типа wchar_t
например const std::wstring aaa = L"bbb";

Нужны комментарии?
Re: Почему один протип работает в "цпной" форме, а другой - нет?
Добавлено: 24 ноя 2015, 08:26
Сионист
Din666 писал(а):а еще более правильно не путать вместе wchar_t и char, и юзать std::wofstream
Вот только UTF-8 ему по дефолту столь же не понятен, как и для
.
Re: Почему один протип работает в "цпной" форме, а другой - нет?
Добавлено: 24 ноя 2015, 08:35
Сионист
Din666 писал(а):L<<std::wstring(L"sdfagfs");
Ну там не все перегрузки упомянуты.
Код: Выделить всё
std: :o fstream &operator << (std: :o fstream &Stream , const std::wstring &String);
std: :o fstream &operator << (std: :o fstream &Stream , const wchar_t *String);
...
std: :o fstream &operator << (std: :o fstream &Stream , const std::wstring &String)
{
...
return Stream;
}
std: :o fstream &operator << (std: :o fstream &Stream , const wchar_t *String)
{
...
return Stream;
}
...
std::wstring s;
std: :o fstream L;
L<<s; // работает
L<<"sdfagfs"<<s<<"dfsfggfsd";// Не работает, запускается стандартная версия вместо перегруженной.
,
Код: Выделить всё
std: :o stream &operator << (std: :o stream &Stream , const std::wstring &String);
std: :o stream &operator << (std: :o stream &Stream , const wchar_t *String);
...
std: :o stream &operator << (std: :o stream &Stream , const std::wstring &String)
{
...
return Stream;
}
std: :o stream &operator << (std: :o stream &Stream , const wchar_t *String)
{
...
return Stream;
}
...
std::wstring s;
std: :o fstream L;
L<<s; // работает
L<<"sdfagfs"<<s<<"dfsfggfsd";// работает
Почему так?
Re: Почему один протип работает в "цпной" форме, а другой - нет?
Добавлено: 24 ноя 2015, 09:24
Romeo
Сионист писал(а):Нужны комментарии?
Да, я добавлю комментарии. Можно вопрос? Где ты видишь, чтобы человек сказал, что так не будет работать? На самом деле, он тебе посоветовал не использовать переменную с таким именем только для того, чтобы "избежать путаницы". Причём, я с ним полностью солидарен в этом совете. В сотый раз прошу тебя, внимательно читай то, что тебе пишут...
Re: Почему один протип работает в "цпной" форме, а другой - нет?
Добавлено: 24 ноя 2015, 09:42
Сионист
В каком месте он сказал, что имеется ввиду путаница именно для человека? Мифическая, кстати. Если для кого то проблема отличить переменную с именем d от буквы d в имени Ladle другой переменной, то он запутается в любом случае и ничего толкового не напишет, иначе же контекст применения буквы L читается с самой же строки.
Re: Почему один протип работает в "цпной" форме, а другой - нет?
Добавлено: 24 ноя 2015, 10:20
Romeo
Сионист писал(а):В каком месте он сказал, что имеется ввиду путаница именно для человека?
Чёрт побери, а для кого? Для единорога? Единственное, что ты хорошо умеешь делать - это придираться. Всё остальное так себе...
Сионист писал(а):Мифическая, кстати. Если для кого то проблема отличить переменную с именем d от буквы d в имени Ladle другой переменной, то он запутается в любом случае и ничего толкового не напишет, иначе же контекст применения буквы L читается с самой же строки.
Вообще-то, это бы просто совет. Не нравится - не следуй ему. Пиши такой код, как тебе нравится. Тебе ведь о читабельности заботиться не нужно: твой код никто кроме тебя не читает. Но если бы такое написал в моём проекте, я бы тебе руки оторвал, честно говорю.
Re: Почему один протип работает в "цпной" форме, а другой - нет?
Добавлено: 24 ноя 2015, 11:52
Din666
Вопрос был про неработающую самодельную перегрузку:
поэтому довольно ясно намекнули, что перегрузка не работает из-за несоответствия типов
"abc" тип char*
L"abc" тип wchar_t*
теперь откуда-то взялся utf-8, который к wstring имеет такое отношение, как Сионист к программированию ))
PS: Дальнейшее обсуждение с Сионист чего-либо считаю бесполезным.
Re: Почему один протип работает в "цпной" форме, а другой - нет?
Добавлено: 24 ноя 2015, 12:40
Сионист
Romeo писал(а):Чёрт побери, а для кого? Для единорога? Единственное, что ты хорошо умеешь делать - это придираться.
Din666 писал(а):ну для начала литера 'L' зарезервирована
Резервируют во избежание путаницы для компилятора.