Доброго дня, подскажите пожалуйста *более правильное* решение моей проблемы:
Есть свой класс String c перегруженным оператором const char*() const:
class String
{
static const char* Convert(const wchar*);
public:
operator const char*() const;
operator string() const;
private:
wstring str;
};
class Client
{
int Func()
{
FILE* f = fopen(fileName, "a+");
if (!f)
return -1;
// ....
fclose(f);
}
String fileName;
};
Так вот после
main()
{
Client c;
c.fileName = "somefile.txt";
c.Func();
}
Все проходит без ликов, а вот при каждом след. вызове Func() — получаем +1 лик.
Смотрим определения операторов.
String::operator const char*() const
{
return String::Convert(str);;
}
String::operator string() const
{
return string(String::Convert(str));
}
Теперь, потанцуем.
int Func()
{
FILE* f = fopen(fileName.operator string().c_str(), "a+"); // делаем явный вызов.
if (!f)
return -1;
// ....
fclose(f);
}
Все проблема решена — ликов больше не наблюдаеться.
Преобразуем
String::operator const char*() const
{
return operator string().c_str();
}
Опять появляются лики!!!
Преобразуем2:
String::operator const char*() const
{
return string(String::Convert(str)).c_str();
}
Лики остаются.
Так вот, танцы с operator const char* у меня не получились, вот поэтому, собственно, и написал.
Хотелось бы помощи в написании operator const char*() const.
Спасибо!