gpt4 book ai didi

c++ - 如何区分合法大小为 1 的类和空类?

转载 作者:行者123 更新时间:2023-11-28 05:50:02 28 4
gpt4 key购买 nike

我有一个模板类,模板变量中有一个元数据类的可选类型名,以备继承类需要时使用。此类的重点是管理 IO,其中还包括元数据。

出于性能原因,如果元类型为空,则该类不执行元 IO。但令我惊讶的是,空类(元类型默认为)的大小不是 0,而是 1。

这不会造成大问题,因为任何一种元类型的大小都不太可能为 1,我可以检查大小是否 > 1 但假设,如何区分空类和一个打包为包含 1 个字节的类?

最佳答案

您可以使用 std::is_emty<T>::value来自标题 type_traits判断一个类型是否完全为空。

此外,您可以从具有已知大小的类型派生(假设这是可能的),并检查父类是否向派生类的大小添加任何内容。这是可行的,因为允许(要求?)编译器执行“空基优化”。

例如:

template <typename T>
struct KnownSize : T {uint64_t whatever;}

template <typename T>
constexpr bool IsEmpty () {return sizeof(KnownSize<T>) <= sizeof(uint64_t);}

(公平警告:尚未尝试此代码;可能行不通。)很可能存在对齐问题(总是存在!),也许其他问题可能会破坏此问题。但我认为所有这些都是可以克服的。

关于c++ - 如何区分合法大小为 1 的类和空类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35448330/

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