gpt4 book ai didi

c++ - 检测类型是否为零元素数组?

转载 作者:太空狗 更新时间:2023-10-29 19:59:05 25 4
gpt4 key购买 nike

考虑以下函数:

template <typename Type>
void f(const Type& x)

无论传递的类型是空 std::tuple,我都想在其中做一些特别的事情(没有专门化)或一个空的 std::array .对于 nu 元素的元组,我可以使用 std::is_same<Type, std::tuple<>>::value但是我可以使用什么技巧来检测零元素数组?

(我正在寻找不需要创建另一个函数或类的解决方案,...)

最佳答案

您可以使用 std::tuple_size , 因为它也适用于 std::array !参见 here .只需使用:

std::tuple_size<Type>::value == 0

检查是否Type是空的 std::tuple<>或一个空的 std::array<T,0> .


综上所述,问题仍然是如果 Type 会发生什么既不是 std::tuple不是std::array .我看到的一般方法是这样的:

constexpr bool IsNotTupleOrArray =
!std::is_class<Type>::value ||
std::is_same<Type,ExcludeThisClass>::value ||
sizeof(Type)>1 || // non-portable, works for GCC 4.8+
...;

std::conditional< IsNotTupleOrArray,
std::false_type,
std::tuple_size<Type> >::type::value;

这基本上意味着您必须明确排除其他类型。例如is_class<Type>排除所有基本类型,如 int 、指针等

关于c++ - 检测类型是否为零元素数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15510368/

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