В основном то, что я хочу сделать что-то вроде этого:ли два преобразования, определенные пользователем
struct target {
int somevalue;
}
struct target_wrapper {
target t;
target_wrapper(float v) : t(target{(int)v * 1024}){}
operator target() { return t; }
}
target t = 1.0f; // would be called as t = (target)((target_wrapper)1.0f)
Я не могу изменить целевую структуру, так как есть код ожидал, что это будет POD. Теперь я утверждаю, что в стандарте C++ разрешено использовать только одно пользовательское преобразование, но, возможно, есть какой-то волшебный трюк, который можно использовать здесь вместо использования функции.
target make_target(float a){ return target{(int)a*1024}; }
target t = make_target(1.0f);
бы работать, но это скорее раздражает, так как все, что я на самом деле сделать, это умножить поплавок на 1024.
Я предлагаю добавить parens '(int) (v * 1024)', чтобы убедиться, что он не делает 'int (v) * 1024' там. Конечно, нет никакого оправдания, чтобы не использовать 'static_cast' здесь anyways :) –
sehe