2016-10-07 4 views
1

У меня есть класс int32, и он настроен таким образом, что он может быть связан с int (перегрузкой оператора), но есть одна часть, которую я не получаю.C++ custom type

int32 i32 = 100; // Works 
int i = 200; // Works 
i32 += 10; // Works 
i32 -= 10; // Works, i32 = 100 right now 
i = i32; // Doesn't work 

Какой оператор мне нужно перегружать, чтобы достичь ссылки I32 возвращающегося он хранится значение, в этом случае 100 (или как еще это может быть сделано)?

+0

Опубликовать [MCVE] пожалуйста! –

+0

@ πάνταῥεῖ Я думал, что этого хватит. Хотелось бы, чтобы я опубликовал весь источник 'int32'? –

+0

Не зная, что такое int32, никто не может сказать, в чем проблема. –

ответ

6

Вы можете добавить conversion operatoroperator int:

class int32 { 
public: 
    operator int() const; 
    ... 
}; 

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

int32 foo; 
int i = foo; 

Если определить оператор преобразования в explicit

explicit operator int() const; 

то выше не получится конструкцией, и требуют явного приведения:

int32 foo; 
int i = static_cast<int>(foo); 
+0

Это прекрасно описано, чего я пытался достичь! Благодарю. –

2
class int32{ 
private: 
    std::int32_t value; 
public: 
    constexpr /*explicit*/ operator std::int32_t() const noexcept { return this->value; } 
}; 

Вы должны написать оператор преобразования.

int32 a = 1; 
std::int32_t b = a;//OK 

Однако, это вредно, так что указать explicit и заставить актеров конвертировать.

int32 a = 1; 
//std::int32_t b = a;//NG 
std::int32_t b = static_cast<std::int32_t>(a); 

Примечание: Вы не shold написать оператор преобразования в целое, поскольку нет Guarante int является 32bit.

0

Внедрите оператор преобразования в свой класс int32.

class int32 
{ 
    // conversion operator 
    operator int() const 
    { 
     int ret = // your logic 
     return ret; 
    } 
} 

Этот оператор преобразования преобразует примитивный тип (int) в определенный тип int32;

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

  • Нет связанных вопросов^_^