Форум: "Потрепаться";
Текущий архив: 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