перегрузка опраторов приведения с++
От: MentorX  
Дата: 13.09.13 10:01
Оценка:
Всем привет. С днем программиста!
Есть шаблон для обертки простых типов, с принуждением указывания значения по умолчанию
template<typename TYPE>
class _property
{
public:
    _property(const TYPE& a) : member(a) {}

    TYPE& operator=(const TYPE& a) { member = a; return member; }

    operator TYPE() { return member; }
    operator TYPE() const { return member; }

    operator TYPE&() { return member; }
    operator const TYPE&() { return member; }

    TYPE* operator&() { return &member; }
    const TYPE* operator&() const { return &member; }

private:
    TYPE member;
};

Не могу скомпилировать такой код:
 _property<long> long_prop = 123; //ok
 long long_var = long_prop; //error C2440: 'initializing' : cannot convert from '_property<TYPE>' to 'long' with TYPE=long Ambiguous user-defined-conversion

Спасибо за внимание и помощь.
Re: перегрузка опраторов приведения с++
От: _NN_ www.nemerleweb.com
Дата: 13.09.13 10:55
Оценка: 3 (1)
Здравствуйте, MentorX, Вы писали:


MX>Всем привет. С днем программиста!

MX>Есть шаблон для обертки простых типов, с принуждением указывания значения по умолчанию
MX>template<typename TYPE>
MX>class _property
MX>{
MX>public:
MX>    _property(const TYPE& a) : member(a) {}

MX>    TYPE& operator=(const TYPE& a) { member = a; return member; }

// Зачем это ?
MX>    //operator TYPE() { return member; }
MX>    //operator TYPE() const { return member; }

MX>    operator TYPE&() { return member; }
// Не забываем const !
MX>    operator const TYPE&() const { return member; }

MX>    TYPE* operator&() { return &member; }
MX>    const TYPE* operator&() const { return &member; }

MX>private:
MX>    TYPE member;
MX>};

MX>Не могу скомпилировать такой код:

MX> _property<long> long_prop = 123; //ok

MX> long long_var = long_prop; //error C2440: 'initializing' : cannot convert from '_property<TYPE>' to 'long' with TYPE=long Ambiguous user-defined-conversion

MX>Спасибо за внимание и помощь.


Теперь все будет работать: http://ideone.com/6eNoQB
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: перегрузка опраторов приведения с++
От: MentorX  
Дата: 13.09.13 12:28
Оценка:
Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.