gpt4 book ai didi

c++ - enable_if 类型的大小未知

转载 作者:行者123 更新时间:2023-11-30 02:43:00 25 4
gpt4 key购买 nike

我遇到一个问题,未知代码正在使用试图在编译时和运行时取消引用类型的元模板。这意味着,它们遍历指针层次结构直到找到匹配器。

现在通常这很好用。但是当用户传递类似的东西时:

typedef struct _Unknown_* Unknown;

然后它失败了,因为它不能被取消引用,即使它是一个有效的指针而不是 void*

我如何在编译时检测到这种“未知大小的结构”并选择不同的代码路径来处理它们,例如不再遍历指针层次结构。

好的,我要找的是这个:

BOOST_STATIC_ASSERT(__is_of_unknown_size__<Unknwon>::value)

,其中 __is_of_unknown_size__ 是一些神奇的构造,它对 Unknown 或任何其他没有大小的构造求值为真。

谢谢

最佳答案

要确定未知大小的类型,您可以使用

#include <type_traits>

template <typename T, typename=void> struct has_size : std::false_type {};
template <typename T>
struct has_size<T, typename std::enable_if<sizeof(T)>::type> : std::true_type {};

Demo .请注意,void_Unknown_ 在这方面的处理方式相同;它们都是不应应用 sizeof 运算符的类型 ([expr.sizeof]/1) 并会导致推导失败。

为了方便也可以添加模板

template <typename T>
using pointee_has_size = has_size<typename std::remove_pointer<T>::type>;

关于c++ - enable_if 类型的大小未知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26561720/

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