Сообщение Re[11]: Сишный каст - зло? от 28.07.2023 14:45
Изменено 28.07.2023 14:49 so5team
Re[11]: Сишный каст - зло?
Здравствуйте, Marty, Вы писали:
S>>Ну и вопрос: зачем усложнять себе жизнь?
M>Собери свой проект с /Wall /WX, удивись, сколько варнингов будет
Спасибо, но мы и так, по возможности, живем с -pedantic -Wall и даже -Weverything, а когда позволяют зависимости, но еще и с -Werror. Но зависимости далеко не всегда такую роскошь позволяют
M>в простейших битовых выражениях,
Во-первых, откуда там?
M>расставь там плюсовые касты и попробуй это прочитать
Во-вторых, если у вас C++ помоложе C++11, то можно же использовать локальные функции. Вот, из реального проекта (комментарии изъяты):
S>>Ну и вопрос: зачем усложнять себе жизнь?
M>Собери свой проект с /Wall /WX, удивись, сколько варнингов будет
Спасибо, но мы и так, по возможности, живем с -pedantic -Wall и даже -Weverything, а когда позволяют зависимости, но еще и с -Werror. Но зависимости далеко не всегда такую роскошь позволяют
M>в простейших битовых выражениях,
Во-первых, откуда там?
M>расставь там плюсовые касты и попробуй это прочитать
Во-вторых, если у вас C++ помоложе C++11, то можно же использовать локальные функции. Вот, из реального проекта (комментарии изъяты):
const auto ptr_cast = []( const std::byte * ptr ) -> std::uint8_t * {
return reinterpret_cast< std::uint8_t * >(
const_cast< std::byte * >( ptr ) );
};
fresh_frame->buf[ 0 ] = av_buffer_create(
ptr_cast( image_bytes ),
total_memory_size,
[]( void *, std::uint8_t * ) -> void {},
nullptr,
AV_BUFFER_FLAG_READONLY );
if( !(fresh_frame->buf[ 0 ]) )
{
throw std::runtime_error{...};
}
std::size_t plane_index = 0u;
for( const auto plane_size : data_plane_sizes )
{
fresh_frame->data[ plane_index ] = ptr_cast( image_bytes );
image_bytes += plane_size;
++plane_index;
}
Re[11]: Сишный каст - зло?
Здравствуйте, Marty, Вы писали:
S>>Ну и вопрос: зачем усложнять себе жизнь?
M>Собери свой проект с /Wall /WX, удивись, сколько варнингов будет
Спасибо, но мы и так, по возможности, живем с -pedantic -Wall и даже -Weverything, а когда позволяют зависимости, то еще и с -Werror. Но зависимости далеко не всегда такую роскошь позволяют
M>в простейших битовых выражениях,
Во-первых, откуда там?
M>расставь там плюсовые касты и попробуй это прочитать
Во-вторых, если у вас C++ помоложе C++11, то можно же использовать локальные функции. Вот, из реального проекта (комментарии изъяты):
S>>Ну и вопрос: зачем усложнять себе жизнь?
M>Собери свой проект с /Wall /WX, удивись, сколько варнингов будет
Спасибо, но мы и так, по возможности, живем с -pedantic -Wall и даже -Weverything, а когда позволяют зависимости, то еще и с -Werror. Но зависимости далеко не всегда такую роскошь позволяют
M>в простейших битовых выражениях,
Во-первых, откуда там?
M>расставь там плюсовые касты и попробуй это прочитать
Во-вторых, если у вас C++ помоложе C++11, то можно же использовать локальные функции. Вот, из реального проекта (комментарии изъяты):
const auto ptr_cast = []( const std::byte * ptr ) -> std::uint8_t * {
return reinterpret_cast< std::uint8_t * >(
const_cast< std::byte * >( ptr ) );
};
fresh_frame->buf[ 0 ] = av_buffer_create(
ptr_cast( image_bytes ),
total_memory_size,
[]( void *, std::uint8_t * ) -> void {},
nullptr,
AV_BUFFER_FLAG_READONLY );
if( !(fresh_frame->buf[ 0 ]) )
{
throw std::runtime_error{...};
}
std::size_t plane_index = 0u;
for( const auto plane_size : data_plane_sizes )
{
fresh_frame->data[ plane_index ] = ptr_cast( image_bytes );
image_bytes += plane_size;
++plane_index;
}