Я разработчик. NET пытается сделать c ++ (кхм), и я обнаружил здесь предупреждение компилятора:
const auto u = (textel.character % font_glyph_column_count) * font_glyph_size; // <- all int
const auto v = (textel.character / font_glyph_column_count) * font_glyph_size; // <- all int
const auto top_left_uv = sf::Vector2f(u, v);
В последней строке, где 'u' и 'v' передаются как аргументы в вектор ctor, компилятор говорит:
преобразование из 'const int' в 'T', возможная потеря данных
Хорошо,. NET этого не делает, но я посмотрел и понял, что не все int32 могут быть представлены в виде числа с плавающей запятой. (Теперь мне интересно, почему. NET не предупреждает об этом :))
Итак, мое решение, вдохновленное. NET, - по-видимому, называется - «C cast», на что жалуется мой Resharper about: итак, я меняю его на static_cast. Окидо ...
const auto u = static_cast<float>(textel.character % font_glyph_column_count) * font_glyph_size;
const auto v = static_cast<float>(textel.character / font_glyph_column_count) * font_glyph_size;
const auto top_left_uv = sf::Vector2f(u, v);
Но юк! теперь мой код arithmeti c засорен этими приведениями, в то время как жонглирование целочисленными вычислениями очень преднамеренное, и необходимость помещать результат в векторы на основе float также необходима ...
Я мог бы изменить например. font_glyph_size в число с плавающей запятой, поэтому приведение типов становится неявным, но имеет смысл использовать дискретное количество пикселей, поэтому int ...
Можно ли сделать этот код красивее?