![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| ANTON_AL |
|
||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 292 Регистрация: 27.1.2007 Репутация: нет Всего: нет |
Доброго дня!
Есть исходники, которые должны работать как со строками юникод, так и не-юникод. Выглядит всё это примерно следующим образом: есть некий, класс String, который в зависимости от #define будет реализован либо как юникодная строка, либо как не-юникодная.
Здесь просто наследуемся либо от std::string, либо от std::wstring. Всё, это для того, чтобы было понятно, о чём идёт речь. Теперь самое интересное: Есть два типа обращения с такой строкой, которые вызывают ошибки, а именно:
И второй тип - это передача строки в функцию конвертер ( _tstof, _tstoi . . . )
Для первого типа обращения компилятор выдаёт ошибку: ISO C++ says that these are ambiguous, even though the worst conversion for the first is better than the worst conversion for the second. Причина этой ошибки такая: у компилятора есть два пути: применить operator[] и вернуть символ, или применить operator const TCHAR*( ), вернуть указатель, потом его инкрементировать до смещения "i". Но если я уберу operator const TCHAR*, то невозможно будет использовать конструкцию
Какие у кого соображения по этому поводу ?? Это сообщение отредактировал(а) ANTON_AL - 7.8.2007, 14:43 |
||||||||
|
|||||||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| ANTON_AL |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 292 Регистрация: 27.1.2007 Репутация: нет Всего: нет |
А как тогда эта проблема решена в std::string ??
Нужно, чтобы выражение
было корректно. |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
у стандартной строки есть метод c_str, который возвращает массив символов.
|
|||
|
||||
| ANTON_AL |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 292 Регистрация: 27.1.2007 Репутация: нет Всего: нет |
А как она решена тогда у ATL::CString ??
Проблема вся в том, что в коде везде используется _tstof( str ), и я не могу это изменить, мне надо реализовать класс таким образом, чтобы он такое допускал Это сообщение отредактировал(а) ANTON_AL - 7.8.2007, 16:44 |
|||
|
||||
| ANTON_AL |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 292 Регистрация: 27.1.2007 Репутация: нет Всего: нет |
Странно, в ATL написано
И ошибки не возникает... Это сообщение отредактировал(а) ANTON_AL - 7.8.2007, 16:46 |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Ыыы... VS поддерживает explicit conversion operator из С++09? Добавлено через 58 секунд А почему нет константных вариантов operator[]? Думаю проблема в этом. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |