Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>Visual Studio (2013-1019). КД>Сражаюсь с предупреждениями 4-го уровня.
Как решить проблему не знаю, но тоже достаёт. Особенно константы float/double, которые отлично влезают в оба типа, но в коде надо вычирать один из.
Подпишусь на ответы.
Re: Приведение константного числа к нужному типу в точке исп
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>Visual Studio (2013-2019).
КД>Вопрос — это нормальный велосипед? Или есть решения получше?
Что-то ничего кроме _STL_WARNING_LEVEL=3 в Preprocesor Definitions не придумывается, лучше это или хуже даже не знаю.
Re: Приведение константного числа к нужному типу в точке использ
Здравствуйте, Igore, Вы писали:
I>Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>>Visual Studio (2013-2019).
КД>>Вопрос — это нормальный велосипед? Или есть решения получше? I>Что-то ничего кроме _STL_WARNING_LEVEL=3 в Preprocesor Definitions не придумывается, лучше это или хуже даже не знаю.
Такая проблема может быть где угодно. Не только в STL.
---
Наверное эта штука (t_numeric_initializator) схожа с std::nullptr_t.
Но я эту мысль глубоко не обдумывал
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Re: Приведение константного числа к нужному типу в точке использ
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>Вопрос — это нормальный велосипед?
Мне нравится. Наверное ваш подход чем-то лучше, чем мой изложенный ниже.
КД>Или есть решения получше?
Я поступал несколько иначе: перегружал для ZeroType операторы сравнения для своего набора классов. А у классов добавлял конструторы с аргументом типа ZeroType. Впрочем, это несколько иная задача.
Пишу по памяти:
namespace xxxx
{
struct ZeroType
{
};
ZeroType zero;
template<class T>
class A
{
public:
A(ZeroType);
};
bool operator == (A a, ZeroType);
bool operator == (ZeroType, A a);
....
}// namespace xxxx
И каждый день — без права на ошибку...
Re[2]: Приведение константного числа к нужному типу в точке использ
Здравствуйте, B0FEE664, Вы писали: КД>>Вопрос — это нормальный велосипед? BFE>Мне нравится. Наверное ваш подход чем-то лучше, чем мой изложенный ниже. КД>>Или есть решения получше? BFE>Я поступал несколько иначе: перегружал для ZeroType операторы сравнения для своего набора классов. А у классов добавлял конструторы с аргументом типа ZeroType. Впрочем, это несколько иная задача.
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>Был приведен очень упрощенный пример, базовый смысл которого — присвоить данным нулевое значение.
КД>При этом тип самих данных не волнует.
КД>Бывает так, что этот тип в явном виде не доступен.
А, понятно.
У решения с шаблоном есть принципиальное ограничение, что инициализаторы могут быть только целочисленные.
Так не получится:
t_numeric_initializator<3.14> pi_initializer;
Хотя касты к вещественным типам в шаблоне есть.
В принципе, хватило бы преобразования к самому маленькому целочисленному типу int8_t и uint8_t.
Тогда неявный каст от меньшего к большему будет без "possible loss of data".
Re[3]: Приведение константного числа к нужному типу в точке использ
Здравствуйте, _niko_, Вы писали: __>Здравствуйте, Коваленко Дмитрий, Вы писали: КД>>Да перестраховки — хотелось явно определить каждый вариант использования этого класса
Здравствуйте, rg45, Вы писали:
R>Ну так bool и допускает инициализацию нулем. Исключить-то не проблема, только стоит ли это делать.
Нужно или нет, надо у ТС спрашивать.
Просто слово numeric намекает именно на числа и там не обязательно ноль, а t_numeric_initailizer<42> может быть.
В этом контексте странно, что есть касты в char и wchar_t, но это еще можно понять.
Также странно, что вещественные числа можно только целочисленными константами инициализировать.
Не выполняется принцип наименьшего удивления, на мой взгляд.
Re[8]: Приведение константного числа к нужному типу в точке
Здравствуйте, qaz77, Вы писали:
R>>Ну так bool и допускает инициализацию нулем. Исключить-то не проблема, только стоит ли это делать.
Q>Нужно или нет, надо у ТС спрашивать.
Q>Просто слово numeric намекает именно на числа и там не обязательно ноль, а t_numeric_initailizer<42> может быть. Q>В этом контексте странно, что есть касты в char и wchar_t, но это еще можно понять. Q>Также странно, что вещественные числа можно только целочисленными константами инициализировать.
Q>Не выполняется принцип наименьшего удивления, на мой взгляд.
Изначально эта штука использовалась для -1. Нужно было нечто для безболезненной установки значений 0xFFFF....
Поддержки для float/double/char/wchar_t тогда не было. Это было в 2008 году.
Значительно позже прикрутил поддержку для нуля.
Посмотрел, подумал и добавил преобразования для float, double, char, wchar_t.
bool не нужен
-- Пользователи не приняли программу. Всех пришлось уничтожить. --