2010-09-19 2 views
2

У меня есть преобразование, как это:C++ перегрузка оператора для приведения типов указателей

Class1 *p1; 
Class2 *p2 = new Class2(); 
p1 = (Class1 *) p2; 

Могу ли я переопределить оператор приведения типа выше, чтобы вернуть указатель на объект пользовательского Class1? Если да, то как?

EDIT: Моя точная проблема заключается в том, что у меня есть такой код:

if (*$1 == ArrayType(AnyType())) 
{ 
    $$ = ((ArrayType *) $1)->getElementsType(); 
} 

Оператор == перегружен так $ 1 может быть типа AnyType *.

ответ

5

Нет, вы не можете перегружать операторы преобразования типов неклассов.

В чем проблема, которую вы хотите решить? Возможно, вы захотите рассмотреть возможность предоставления операторов преобразования в реальных классах.

+0

Это проект Bison/Flex. yylval должен быть указателем на класс, а не экземпляр его. Я определил класс Type с подклассами ArrayType и AnyType (который должен быть равен любому типу Type (sub)). Поэтому иногда у меня есть указатель на AnyType и должен создавать указатель ArrayType. –

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