Здравствуйте, 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
Всем привет. С днем программиста!
Есть шаблон для обертки простых типов, с принуждением указывания значения по умолчанию
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
Спасибо за внимание и помощь.