Потомок std::ofstream, не работает манипулятор

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Код: Выделить всё

class MyStream: public std: :o fstream
{
 public:
  MyStream &operator << (const char    *String);
  MyStream &operator << (const wchar_t *String);
};
...
MyStream f;
f.open("FileName");
f<<std::endl;// ругается на эту строку
Пишет:
D:\Projects\cpp\Test17\Test\Test.cpp|38|error: no match for 'operator<<' (operand types are 'TUTF8FileStream' and '<unresolved overloaded function type>')|
. Если оба оператора-члена убрать, то эйси. Да вот беда: класс создан ради оператора-члена с прототипом

Код: Выделить всё

MyStream &operator << (const wchar_t *String);
. Как исправить?
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Предлагаю не строить велосипедов с квадратными колесами и использовать ICU. http://site.icu-project.org/
2B OR NOT(2B) = FF
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

И чем оно лучше? Тем более мне не нужны все кодировки. Нужны только две: utf8 и внутреннее представление типов wchar_t и wstring. И даже интерфейс выбора кодировки не предусмотрен и место ему в проекте нет.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

В вашей аналогии нужны только круглые колёса одного диаметра и стандартные звёздочки другого, но тоже одного диаметра, а не все варианты колёс, начиная с треугольных.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Сионист писал(а):И чем оно лучше? Тем более мне не нужны все кодировки. Нужны только две: utf8 и внутреннее представление типов wchar_t и wstring. И даже интерфейс выбора кодировки не предусмотрен и место ему в проекте нет.

wchar_t и wstring - крайне косячные фичи C++. На win32 wchar_t это UTF-16, на Маке и Линуксе - UCS-32.
2B OR NOT(2B) = FF
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Сионист писал(а):В вашей аналогии нужны только круглые колёся одного диаметра и стандартные звёздочки другого, но тоже одного диаметра, а не все варианты колёс, начиная с треугольных.

Колеса из ICU делались людьми многие из которых закончили университет по специальности "теоретические основы информатики" и отлаживались на боевых задачах более десятилетия.
2B OR NOT(2B) = FF
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Эйси. Но мне не нужны все варианты колёс начиная с треугольных. Если каждую мелочь решать такими средствами, то мне не хватит винта даже на полпроцента проекта.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

А изначальная проблема всё ещё актуальна?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Уже решена.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Ну хоть бы сюда выложил то, как решил. Может кому пригодится в будущем. Нагуглят эту тему и получат профит.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить