gpt4 book ai didi

c++ - 检查类型的所有字段是否为 "primitives"

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:54 28 4
gpt4 key购买 nike

出于某种原因,我想做这样的事情:

template<typename Data>
void write(const Data& data) {
std::fstream out {...};
out.write(reinterpret_cast<const char *>(&data), sizeof(Data));
out.flush();
}

Data是一种只有原始类型的类型,或者是更具体的可简单复制的类型。这是否意味着如果我使用 static_assert (std::is_trivially_copyable<Data>::value, "");里面write()我真的确定没有类型可以传递给不能重新解释为字节的函数吗?还是我应该在 static_assert 中检查任何其他条件?

最佳答案

我想平凡可复制性并不能真正说明安全性。

但无论如何,你应该自己决定。

例如:

假设 Data 包含一个non-trivially-copyable 类型的指针。指针本身实际上是trivially-copyable,它使整个类型trivially-copyable。但是,将指针值写入文件有什么意义吗?

因此,即使您决定检查每个成员值是否可简单复制,并得到肯定的答案,也不一定意味着您可以将此类型写入文件。

另一个例子:

另一方面,如果一个类型只包含基本类型并且有一个复制或移动构造函数,它被归类为不可平凡复制,但是写入它是完全安全的一个文件。

关于c++ - 检查类型的所有字段是否为 "primitives",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51721571/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com