C++ is_trivially_copyable 检查
如何检查 C++ 类型是否可简单复制?我有一个类,它使用指定模板类型 T 的 memcpy 和 memcmp 函数,我想对使用 memcpy 复制不安全的类型触发断言。有什么办法可以做到这一点(按照现有标准)?
How to check whether or not C++ type is trivially copyable? I have a class, which uses memcpy and memcmp functions with specified template type T and I would like to fire assert for types, that are not safe to copy with memcpy. Is there any way to do that (with existing standard)?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
不,在 C++98/C++03 中不可能。类似这样的事情就是
添加到 C++0x 的原因。
中的一些功能可以在 C++03 中实现,通常使用 SFINAE 原理,但有几个功能,包括std::is_trivially_copyable
,只需要内置编译器支持。No, not possible in C++98/C++03. Things like this are why
<type_traits>
was added to C++0x. Some of the features from<type_traits>
can be implemented in C++03, often using the SFINAE principle, but several, includingstd::is_trivially_copyable<T>
, will simply require built-in compiler support.boost 中有可用于此目的的类型特征。
然而,你是在浪费时间——如果类型是可以轻易复制的,那么对类型进行内存复制不会比优化器使用复制构造函数生成的速度快。只需使用复制构造函数即可。
There are type traits available for this in boost.
However, you're wasting your time- memcpying a type is not going to be faster than what your optimizer will produce with a copy constructor if the type is trivially copyable. Just use the copy constructor.
最接近的是 boost:: is_pod<>。
The closest thing is boost::is_pod<>.