c++ - 如何将 const uint8_t* 转换为 char*
问题描述
我有一个const uint8_t*
我想转换为 achar*
的接口,该接口需要一个char*
.
最简单的方法是使用 C 风格的演员表:
const uint8_t* aptr = &some_buffer;
char* bptr = (char*)aptr;
但是,我们的内部样式指南(基于Google C++ 样式指南)禁止 C 样式转换。
另一种选择是这个怪物,我觉得它很难读:
char *cptr = reinterpret_cast<char*>(const_cast<uint8_t*>(aptr));
我尝试的这些其他选项都无法编译:
char* dptr = reinterpret_cast<char*>(aptr);
char* eptr = const_cast<char*>(aptr);
char* fptr = static_cast<char*>(aptr);
有什么方法可以使用 C++ 风格的演员来执行这种演员,而无需嵌套两个单独的演员操作?
解决方案
有什么方法可以使用 C++ 风格的演员来执行这种演员,而无需嵌套两个单独的演员操作?
不便携,不。没有单一的“类型错误并且 const 也是错误的”演员表。
另一种选择是这个怪物,我觉得它很难读:
char *cptr = reinterpret_cast<char*>(const_cast<uint8_t*>(ptr));
去做。
C++ casts 和你的内部风格指南都在努力让这看起来很可怕。
您可以通过编写自己的演员表来防止这些演员表的重复。
template< typename T >
char* awful_monster_cast( const T * ptr )
{
return reinterpret_cast<char*>(const_cast<T*>(ptr));
}
推荐阅读
- javascript - 如何预加载 js worker 和 wasm 脚本以供离线使用(pwa)?
- spring-boot - 在 java 8 中使用 spring-boot:build-image 创建容器时 Docker 运行失败
- python - 如何在 matplotlib 中缩放轴并避免轴相互绘制
- python - 使用字符串格式传递列而不是变量以在 python 中将 yymmdd 转换为 dd-mm-YYYY
- javascript - 如果所有子项都设置为 display:none,我如何遍历 div 并添加一个类?
- java - 非重复的正则表达式和数字的精确长度
- azure - SSRS 使用 ADO 报告跨不同环境的部署
- python - 使用 Python Selenium 执行查询时,表单输入值会自动重置
- text - SklearnClassifier.train(labeled_featuresets)
- griddb - GridDb 集群安装程序不可用