Проблемы с использованием operator const char*() const
От: Кулешов Сергей Украина  
Дата: 19.12.05 13:17
Оценка:
Доброго дня, подскажите пожалуйста *более правильное* решение моей проблемы:
Есть свой класс 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.
Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.