2009-11-09 7 views
1

У меня есть следующий класс CppProperty класс, который имеет значение:Как преобразовать класс C++ в примитивный/другой тип/класс/структуру?

template<typename TT> 
class CppProperty 
{ 
    TT val; 
public: 
    CppProperty(void) 
    { 
    } 

    CppProperty(TT aval) : val(aval) 
    { 
    } 

    CppProperty(const CppProperty & rhs) 
    { 
     this->val = rhs.val; 
    } 

    virtual ~CppProperty(void) 
    { 
    } 

    TT operator=(TT aval) 
    { 
     this->val = aval; 
     return this->val; 
    } 

    friend TT operator++(CppProperty & rhs); 
    friend TT operator--(CppProperty & rhs); 
    friend TT operator++(CppProperty & rhs, int); 
    friend TT operator--(CppProperty & rhs, int); 

    //template<typename RR> 
    //friend RR operator=(RR & lhs, const CppProperty & rhs); 
    //friend int & operator=(int & lhs, const CppProperty & rhs); 
    //int reinterpret_cast<int>(const CppProperty & rhs); 
}; 

Я хочу сделать задание так:

CppProperty<char> myproperty(10); 
myproperty++; 
int count = myproperty; 

Как это можно сделать? Я не могу переопределить оператор =. Любая помощь очень ценится! Спасибо!

ответ

5

Вам потребуется оператор преобразования:

operator const TT&(void) const 
{ 
    return val; 
} 


operator TT&(void) 
{ 
    return val; 
} 

Там является краткое руководство по операторам преобразования here. Короче говоря, когда компилятор пытается преобразовать тип, он сначала рассмотрит правую часть для оператора, который преобразует его в нужный тип. То, что мы делаем, говорит «Что бы ни было TT, этот класс может быть преобразован в него».

Если операторы не найдены, он смотрит, можно ли построить левую сторону с правой стороны и так далее. (До, если он не может найти преобразование, оно испускает ошибку.)


Вы можете удалить явно определенный конструктор по умолчанию, если объявить другой конструктор, как это:

// If not specified, construct with default-constructed type. 
CppProperty(TT aval = TT()) : val(aval) 
{ 
} 
+0

Спасибо GMan! Выглядит круто! Позвольте мне попытаться вернуться к вам в ближайшее время;) – Viet

+0

Это работает как шарм! Еще раз спасибо! – Viet

+0

Нет проблем, убедитесь, что ваши 'const''s находятся в правильном месте, у меня были их назад в первом сообщении. – GManNickG

1

Вам необходимо предоставить operator int() вашему классу, чтобы обеспечить неявное преобразование в int.

+0

Hi Naveen! Спасибо за быстрый ответ. Затем как конвертировать в разные классы/типы данных с помощью операторов? – Viet

Смежные вопросы