В C ++ я пытаюсь использовать неявное преобразование с условным оператором. Рассмотрим этот пример:
class MyFloat
{
public:
MyFloat(float val){m_val = val;}
operator float(){return m_val;}
protected:
float m_val;
};
int main(int argc, char **argv)
{
MyFloat a = 0.5f;
MyFloat b = 1.0f;
float x = true ? a-0.5f : b;
return 0;
}
Это вызывает ошибку компилятора:
error: operands to ?: have different types ‘MyFloat’ and ‘float’
Я ожидаю, что условный оператор неявно преобразует b
в тип a-0.5
, float. Но этого не происходит. Как добиться этого неявного приведения?
В идеале я хочу избежать статического приведения или метода доступа, такого как float MyFloat::getValue()
.
...
и т. Д. Добавлениеfloat MyFloat::getValue() const
не сделает ваш интерфейс хуже, чем он уже есть. : это добавляет возможность кому-то получить поплавок, точно говоря, что они делают, когда вы уже дали возможность получить поплавок, даже не имея в виду. - person aschepler   schedule 07.02.2013