std::string unicode
От: JakeS  
Дата: 15.10.04 10:10
Оценка:
Прога под unicode и mbsc.
соответственно используются все типы/классы/функции в универсальном виде. TCHAR, wcslen.
как быть со string. есть string, есть wstring, а как насчет универсального, чтобы руками самому не определять?
Re: std::string unicode
От: korzhik Россия  
Дата: 15.10.04 10:11
Оценка: :)
Здравствуйте, JakeS, Вы писали:

JS>Прога под unicode и mbsc.

JS>соответственно используются все типы/классы/функции в универсальном виде. TCHAR, wcslen.
JS>как быть со string. есть string, есть wstring, а как насчет универсального, чтобы руками самому не определять?

typedef std::basic_string<TCHAR> tstring;
Re[2]: std::string unicode
От: JakeS  
Дата: 15.10.04 10:17
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте, JakeS, Вы писали:


JS>>Прога под unicode и mbsc.

JS>>соответственно используются все типы/классы/функции в универсальном виде. TCHAR, wcslen.
JS>>как быть со string. есть string, есть wstring, а как насчет универсального, чтобы руками самому не определять?

K>
K>typedef std::basic_string<TCHAR> tstring;
K>


Это понятно. Просто интересно, всяких универс. функция наплодили много, неужели string лень было? =)
Re[3]: std::string unicode
От: korzhik Россия  
Дата: 15.10.04 10:20
Оценка:
Здравствуйте, JakeS, Вы писали:

JS>Это понятно. Просто интересно, всяких универс. функция наплодили много, неужели string лень было? =)


ни понил
а какие тебя функции интерисуют?
Re: std::string unicode
От: PM  
Дата: 15.10.04 10:22
Оценка:
Здраствуйте, JakeS, Вы писали:

> Прога под unicode и mbsc.

> соответственно используются все типы/классы/функции в универсальном
> виде. TCHAR, wcslen.
> как быть со string. есть string, есть wstring, а как насчет
> универсального, чтобы руками самому не определять?
Можно сделать типа этого
Автор: MaximE
Дата: 10.09.03


--
foobar2000 v0.8.3: выключен.
Re[4]: std::string unicode
От: JakeS  
Дата: 15.10.04 10:22
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте, JakeS, Вы писали:


JS>>Это понятно. Просто интересно, всяких универс. функция наплодили много, неужели string лень было? =)


K>ни понил

K>а какие тебя функции интерисуют?

да вопрос не в том как. Просто что мешало в string бописать этот тайпдеф. =)
Ладно. проехали.
Re[4]: std::string unicode
От: JakeS  
Дата: 15.10.04 10:25
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте, JakeS, Вы писали:


JS>>Это понятно. Просто интересно, всяких универс. функция наплодили много, неужели string лень было? =)


K>ни понил

K>а какие тебя функции интерисуют?

дело то в чем. прога было под mbsc only. сейчас перевожу. вот и получается что нужно таскать по всем файлам этот тайпдеф, либо инклюд с доп. хидером с этим тайпдефом.
Вот и возникает логичный вопрос, почему обо мне никто не позаботился и не включил данную возможность сразу в <string>
Re[5]: std::string unicode
От: NKZ  
Дата: 15.10.04 11:47
Оценка:
Здравствуйте, JakeS, Вы писали:

JS>дело то в чем. прога было под mbsc only. сейчас перевожу. вот и получается что нужно таскать по всем файлам этот тайпдеф, либо инклюд с доп. хидером с этим тайпдефом.

JS>Вот и возникает логичный вопрос, почему обо мне никто не позаботился и не включил данную возможность сразу в <string>

Можно просто прописать этот тайпдеф в stdafx.h.
... << RSDN@Home 1.1.4 beta 3 rev. 0>>
Re[4]: std::string unicode
От: JakeS  
Дата: 15.10.04 12:57
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте, JakeS, Вы писали:


JS>>Это понятно. Просто интересно, всяких универс. функция наплодили много, неужели string лень было? =)


K>ни понил

K>а какие тебя функции интерисуют?

а как бы теперь попроще boost::lexical_cast обучить типу tstring
Re[5]: std::string unicode
От: korzhik Россия  
Дата: 15.10.04 13:04
Оценка:
Здравствуйте, JakeS, Вы писали:

JS>а как бы теперь попроще boost::lexical_cast обучить типу tstring


если не определять перед
#include "boost/lexical_cast.hpp"

ни один из макросов:
BOOST_NO_STRINGSTREAM
BOOST_NO_STD_WSTRING
BOOST_NO_STD_LOCALE
BOOST_NO_INTRINSIC_WCHAR_T

то никаких проблем быть не должно
Re[6]: std::string unicode
От: JakeS  
Дата: 15.10.04 13:07
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте, JakeS, Вы писали:


JS>>а как бы теперь попроще boost::lexical_cast обучить типу tstring


K>если не определять перед

K>
K>#include "boost/lexical_cast.hpp"
K>

K>ни один из макросов:
K>
K>BOOST_NO_STRINGSTREAM
K>BOOST_NO_STD_WSTRING
K>BOOST_NO_STD_LOCALE
K>BOOST_NO_INTRINSIC_WCHAR_T
K>

K>то никаких проблем быть не должно

не тут то было...

C:\program files\boost\include\boost-1_31\boost\lexical_cast.hpp(150) : error C2679: binary '>>' : no operator found which takes
a right-hand operand of type 'std::tstring' (or there is no acceptable conversion)
C:\program files\boost\include\boost-1_31\boost\lexical_cast.hpp(189) : see reference to function template instantiation
'bool boost::detail::lexical_stream<Target,Source>::operator >><Target>(InputStreamable &)' being compiled
with
[
Target=std::tstring,
Source=__int64,
InputStreamable=std::tstring
]
D:\projects\aipsin\general libraries\usm\sectionsmasks.cpp(188) : see reference to function template instantiation
'Target boost::lexical_cast<std::tstring,__int64>(Source)' being compiled
with
[
Target=std::tstring,
Source=__int64
]
Re[7]: std::string unicode
От: NKZ  
Дата: 15.10.04 13:13
Оценка:
Здравствуйте, JakeS, Вы писали:

Так работает, а ты хочешь что бы наоборот работало, судя по ошибкам?
tstring str = "1";
int test = boost::lexical_cast<int>(str);
... << RSDN@Home 1.1.4 beta 3 rev. 0>>
Re[7]: std::string unicode
От: korzhik Россия  
Дата: 15.10.04 13:14
Оценка:
Здравствуйте, JakeS, Вы писали:

JS>не тут то было...


JS>C:\program files\boost\include\boost-1_31\boost\lexical_cast.hpp(150) : error C2679: binary '>>' : no operator found which takes

JS> a right-hand operand of type 'std::tstring' (or there is no acceptable conversion)

Ну это ты чего то напортачил (особо смущает выделенное жирным)

вот код. который работает
#define _UNICODE
#include <tchar.h>

#include "boost/lexical_cast.hpp"

typedef std::basic_string<TCHAR> tstring;

int main()
{
  int i = 10;

  tstring str = boost::lexical_cast<tstring>(i);
}
Re[8]: std::string unicode
От: JakeS  
Дата: 15.10.04 13:36
Оценка:
Здравствуйте, korzhik, Вы писали:

K>Здравствуйте, JakeS, Вы писали:


JS>>не тут то было...


JS>>C:\program files\boost\include\boost-1_31\boost\lexical_cast.hpp(150) : error C2679: binary '>>' : no operator found which takes

JS>> a right-hand operand of type 'std::tstring' (or there is no acceptable conversion)

K>Ну это ты чего то напортачил (особо смущает выделенное жирным)


K>вот код. который работает

K>
K>#define _UNICODE
K>#include <tchar.h>

K>#include "boost/lexical_cast.hpp"

K>typedef std::basic_string<TCHAR> tstring;

K>int main()
K>{
K>  int i = 10;

K>  tstring str = boost::lexical_cast<tstring>(i);
K>}

K>

по коду бывает std::string
чтобы сделать все реплейсом:
namespace std
{
typedef basic_string<TCHAR> tstring;
}

все хорошо. но boost::lexicalcast<std::tstring>(__int64) и наоборот не работает.
Re[9]: std::string unicode
От: korzhik Россия  
Дата: 15.10.04 13:46
Оценка:
Здравствуйте, JakeS, Вы писали:

JS>namespace std

JS>{
JS>typedef basic_string<TCHAR> tstring;
JS>}
нельзя добавлять новые имена в namespace std, делай так:
  typedef basic_string<TCHAR> tstring;


JS>но boost::lexicalcast<std::tstring>(__int64) и наоборот не работает.

вот код, который у меня работает
#define _UNICODE
#include <tchar.h>

#include "boost/lexical_cast.hpp"

typedef std::basic_string<TCHAR> tstring;

int main()
{
    {
        __int64 i = 10;
        tstring str = boost::lexical_cast<tstring>(i);
    }

    {
        tstring str = _T("10");
        __int64 i = boost::lexical_cast<__int64>(str);
    }
}
Re[9]: std::string unicode
От: korzhik Россия  
Дата: 15.10.04 13:47
Оценка:
Здравствуйте, JakeS, Вы писали:

JS>по коду бывает std::string

JS>чтобы сделать все реплейсом:
JS>namespace std
JS>{
JS>typedef basic_string<TCHAR> tstring;
JS>}

так заменяй "std::string" на "tstring"
Re[10]: std::string unicode
От: JakeS  
Дата: 15.10.04 13:57
Оценка:
Здравствуйте, korzhik, Вы писали:

почему нельзя добавлять в std? физических ограничений нет...
Re[11]: std::string unicode
От: korzhik Россия  
Дата: 15.10.04 13:59
Оценка:
Здравствуйте, JakeS, Вы писали:

JS>Здравствуйте, korzhik, Вы писали:


JS>почему нельзя добавлять в std? физических ограничений нет...

по стандарту нельзя
Re[2]: std::string unicode
От: Sergey J. A. Беларусь  
Дата: 15.10.04 18:07
Оценка:
Здравствуйте, korzhik, Вы писали:

K>
K>typedef std::basic_string<TCHAR> tstring;
K>


Хм. Раньше как-то не задумывался и писал так:

#ifdef _UNICODE
    #define _tstring wstring
#else
    #define _tstring string
#endif


Чем они различаются в плане ... мм... использования ? Может стоит перейти на
typedef std::basic_string<TCHAR> tstring;


?
Я — свихнувшееся сознание Джо.
Re[3]: std::string unicode
От: _nn_ www.nemerleweb.com
Дата: 15.10.04 19:09
Оценка:
Здравствуйте, Sergey J. A., Вы писали:

SJA>Здравствуйте, korzhik, Вы писали:


K>>
K>>typedef std::basic_string<TCHAR> tstring;
K>>


SJA>Хм. Раньше как-то не задумывался и писал так:


SJA>
SJA>#ifdef _UNICODE
SJA>    #define _tstring wstring
SJA>#else
SJA>    #define _tstring string
SJA>#endif
SJA>


SJA>Чем они различаются в плане ... мм... использования ? Может стоит перейти на

SJA>
SJA>typedef std::basic_string<TCHAR> tstring;
SJA>


SJA>?


Вообще можно написать просто:
#ifdef UNICODE
 typedef std::string tstring;
#else
 typedef std::wstring tstring;
#endif // UNICODE


А переход с define на typedef это однозначно !
Почему, поиск на форуме чем typedef лучше define .
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.