gpt4 book ai didi

c++ - 使用 SFINAE 检查类型是否完整

转载 作者:IT老高 更新时间:2023-10-28 22:20:09 24 4
gpt4 key购买 nike

是否可以通过 SFINAE 检查类型是否已完全定义?

例如

template <class T> struct hash;
template <> struct hash<int> {};

// is_defined_hash_type definition...

enum Enum { A, B, C, D };

static_assert ( is_defined_hash_type<int> ::value, "hash<int> should be defined");
static_assert (! is_defined_hash_type<Enum>::value, "hash<Enum> should not be defined");

解决方案不应修改 散列结构

最佳答案

您可以制作 is_complete类型特征,使用它是不正确的事实来评估 sizeof(T)对于不完整的类型 T :

template <typename T>
struct is_complete_helper {
template <typename U>
static auto test(U*) -> std::integral_constant<bool, sizeof(U) == sizeof(U)>;
static auto test(...) -> std::false_type;
using type = decltype(test((T*)0));
};

template <typename T>
struct is_complete : is_complete_helper<T>::type {};

并使用它来检查 is_defined_hash_type<T>通过确定 hash<T>已经完成。 (Live at Coliru)

正如丹尼尔在他的回答中所说,这种东西的效用是有限的。 trait 实际上并不测试在您查询的代码中类型是否完整,它会测试在程序中为给定类型首次实例化 trait 时类型是否完整。

关于c++ - 使用 SFINAE 检查类型是否完整,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21119281/

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