class string в Visual C++

Demid

как пользоваться class string в Visual C++?

tinka2302

Как угодно. Там все конструкторы необходимые есть, кроме приведения к BSTR, и то может уже добавили...
А еще лучше - go MSDN

galya1

>Там все конструкторы необходимые есть, кроме приведения к BSTR
с BSTR естественным образом дружит std::wstring
а std::string про него не знает нифига и, по идее, и знать не должен...

tinka2302

Я уже точно не помню, но в общем мне приходилось извращаться, чтоб обычную строку (char *) сконвертить в BSTR. Если бы CString поддерживал такой конструктор, гемора бы не было.

kola

а чем тебе не нравится класс CComBSTR (чтобы не мучаться с BSTR)
а в CString есть метод AllocSysString , так че с простой (char*) строкой мучаться

galya1

Так ты определись о чем речь идет...
вообще со строками в виндах дикий геморрой... куча строковых типов, некоторые из них всегда "узкие", некоторые - всегда "широкие", некоторые условно компилируются в узкие/широкие, куча дублирующих друг друга функций для их поддержки... помойка полная...

std::string - из STL, про него смотри выше...

CString - это из MFC, он основан на TCHAR, который компилируется условно или в char, или в wchar_t
Для него, кстати, конструктор, который делает из обычной строки юникод есть, но, есесно, только если включена поддержка юникода (#define _UNICODE)... А иначе - иметься...

При этом есть миллион других способов преобразования...

Бывает, в одном куске ублюдочного кода встретишь использование всего, чего только можно: char, wchar_t, TCHAR, string, wstring, PTSTR, CString и еще какого-нибудь кала, чуть ли не вплоть до UNICODE_STRING... Поубивал бы...

А про BSTR я вообще молчу... Оно может, кое-где и удобнее, но скоко геморроя...

tinka2302

Я с STL не общался. Все MFC => CString
и насколько я понимаю Юникод и BSTR не одно и то же...
Кажется для конвертации я юзал _bstr_t. Точно не скажу, потому что снес MSDN.

galya1

>Юникод и BSTR не одно и то же...
BSTR - это извращение - юникод с длиной в префиксе, работать с которым напрямую "не рекомендуется"... проблемы тока из-за его юникодности...

antcatt77

Юникодность это хорошо, не надо специально заморачивать для поддержки нескольких языков

galya1

Хорошо, когда с самого начала с ним все делается... Но поскольку все, что только можно, отягощено тяжелым однобайтовым наследием,. имеем кучу геморроя...

antcatt77

отягощено тяжелым однобайтовым наследием

Что, например?

starmaster

Так там же однобуквенные макросы есть, которые конвертают все во все, да еще и смотрят, какой режим компиляции стоит...
Только какие конкретно я не помню...

antcatt77

Да, их там много, только они не все однобуквенные... (_T, A2T, T2W, W2CA, A2BSTR и т.д.)

starmaster

_T - это вроде оно.
И там еще один подобный должен быть...
Оставить комментарий
Имя или ник:
Комментарий: