Я использую select и эти макросы в коде C ++ с -Wall и не получаю предупреждений, хотя я не использую -Wold-style-cast.Я думаю, что лучшим подходом было бы сделать шаг назад и пересмотреть, почему важно не использовать броски в стиле C.Я думаю, что для взаимодействия со стандартными библиотечными функциями C это вполне уместно.
Метод C ++ dynamic_cast
полезен для полиморфизма и классов.const_cast
- это особый случай удаления константы.Кастинги static_cast
и C (type)
очень похожи.Я не уверен, какое преимущество при использовании static_cast<type>
обеспечивает более (type)
приведений, за исключением того, что это в стиле C ++.reinterpret_cast<type>
предлагает небольшое преимущество по сравнению с методом *(type*)&
C и является примерно таким же уродливым, как и они.
В общем, необходимость в приведении подразумевает определенный недостаток в разработке программного обеспечения, хотя dynamic_cast
возможно, исключение из этого.Хотя похвально стремиться не нуждаться в приведениях в своем собственном коде, я не думаю, что имеет смысл пытаться задним числом применять эти значения к сторонним библиотекам, особенно к стандартным или ОС.
Есливы действительно не хотите использовать приведение в стиле C в вашем коде, я бы установил политику вне настроек компилятора и просто просмотрел ваш код и удалил их.Если вы действительно хотите, чтобы компилятор выполнил эту работу за вас, вам придется отключить предупреждение для программного обеспечения, которое вы не можете контролировать.Это может быть больше работы, чем это стоит, а в некоторых случаях даже не нужно.Например, в Дарвине FD_ISSET не имеет приведений в своей реализации.В конце концов, существуют гораздо худшие практики, чем приведения в стиле C, чтобы исключить код.