Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.03.05;
Скачать: [xml.tar.bz2];

Вниз

Вопрос по синтаксису С++ - конветирование   Найти похожие ветки 

 
VEG   (2004-02-06 21:01) [0]

Мне необходимо создать совместимость между char* и string. Можно, конечно, для каждого оператора реализовать нечто подобное inline bool operator == (string is, pchar arg) { return strcmp(is.data(), arg)==0; }, однако мне видится более простое решение. Ведь для char* определены все функции, поэтому для совместимости между char и string необходимо в string обращаться через varname.data();. На мой взгляд, лучше всего написать inline оператор, подставляющий из string значение типа char* или, наоборот, из char* значение типа string. Мне это представляется подобным образом, однако этот код не работает:
inline string operator string (char* ch)
{ // error C2549: user-defined conversion cannot specify a return type
string sOut;
sOut = ch;
return sOut;
}

...или...
inline char* operator char (string st)
{ // error C2549: user-defined conversion cannot specify a return type
char* sOut;
strcpy(sOut, st.data());
return sOut;
}

Каков синтаксис необходим данной функции?


 
Alex Konshin   (2004-02-06 22:06) [1]

Я уверен, что CString гораздо ближе к дельфийскому String, чем char*. Для char* есть полный аналог - PChar.
Или я не понял твоей проблемы?


 
Fantasist   (2004-02-06 22:36) [2]

Чтобы char* преводилось к твоему string, нужно определить конструктор:
string(const char*){...}

Чтобы string преводилось к char* нужено добавить в string оператор:
inline operator char*(){...}


 
Fantasist   (2004-02-06 22:38) [3]

Кстати, а книжки слабо почитать? Слишком много от тебя вопросов по С++, которые описанны почти в любой хорошей книжке. Тебе конечно ответять, но по ответам ты узнаешь меньше, чем тебе расскажут в книге.


 
Suntechnic   (2004-02-06 23:15) [4]

Я что-то вообще не понял о какой совместимости идёт речь и зачем автор велосипед изобретает. У STL-кого string-а есть для этих целей метод c_str(), а конвертация char * в string проходит вообще автоматически.


 
N169   (2004-02-06 23:44) [5]

Если использовать для написания проги C++ Builder, то можно достичь полной совместимости с дельфийским string-ом, используя (VCL) класс AnsiString.


 
VEG   (2004-02-07 01:01) [6]

>>Alex Konshin
Нет, как вы уже догадались, вы не все правильно поняли.
>Fantasist
Спасибо. У меня есть книжка, только поиск в ней очень затруднителен. Да ладно тут поиск. Там расписано все про создание классов. Есть и это, просто я почему-то предположил себе другой метод (не подумал про этот). Я основывался на том, что класс можно сделать совместимым с другими типами объявлением оператора operator type() const;, и это ввело меня в заблуждение.
Извините, что я надоедаю вопросами. Так уж получается...
>>Suntechnic
Действительно, в STL, что в составе C++Builder6 совместимость этих типов реализована, однако в STL из состава VisualC++6, как оказалось, не имеет таковой.
>>N169
Нет, разговор идет именно об STL-овском string.


 
Fantasist   (2004-02-08 01:55) [7]


> Извините, что я надоедаю вопросами. Так уж получается...


Ну, после этой фразы, претензии предьявлять будет тяжело. :)
"Вежливость, лучшее оружие вора." :) И почему люди (и я в том числе) об этом постоянно забывают?


> Я основывался на том, что класс можно сделать совместимым
> с другими типами объявлением оператора operator type() const;,
>


В принципе можно описать внешний оператор преобразования, но это плохой тон. Так делают только когда нет возможности использовать члены класса.


> Нет, разговор идет именно об STL-овском string.


Если речь о std::string тогда вообще не нужно ничего определять, все уже определенно. см Suntechnic © [4]


 
Suntechnic   (2004-02-08 10:34) [8]

>VEG © (07.02.04 01:01) [6]
Действительно, в STL, что в составе C++Builder6 совместимость этих типов реализована, однако в STL из состава VisualC++6, как оказалось, не имеет таковой.


Ещё разок.... чего кто не имеет? Я писал и на том и на другом и использовал STL весьма интенсивно. Никаких проблем при этом ни с какими стороками никогда не наблюдал и не думаю, что вообше кто либо их имел.


 
VEG   (2004-02-13 00:02) [9]

>>[7] Fantasist © (08.02.04 01:55)
>>[8] Suntechnic © (08.02.04 10:34)
На самом деле ошибка была моя, и не в коде, а в подключении модуля string. Надо было писать просто #include <string>, а я написал #include "string.h". Разобрался в этом, когда исходники string разглядывал. Оказалось, что там две разные верии:)
Извините пожалуйста, что по глупости своей побеспокоил.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2004.03.05;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.006 c
14-12492
Knight
2004-02-13 00:41
2004.03.05
Алгоритмы простых логических игр...


14-12499
syte_ser78
2004-02-13 11:28
2004.03.05
недокачанный zip


4-12579
INQ
2003-12-26 22:27
2004.03.05
Передача имени процесса из dll в программу-монитор


14-12483
TUser
2004-02-13 14:05
2004.03.05
технологии


1-12436
Alexey
2004-02-23 12:55
2004.03.05
Как узнать содержимое папки?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский