gpt4 book ai didi

c++ - 如果 T 是一个函数,不要对 T 使用 sizeof

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

我有近乎以下的结构来检测类型是否可以按值传递:

template <class T>
struct should_be_passed_by_value {
static constexpr bool value =
std::is_scalar<T>::value ||
std::is_array<T>::value ||
std::is_reference<T>::value ||
(sizeof(T) <= sizeof(void*));
};

问题是:当我为类 C 函数指针或 std::function 实例化它时,编译器说:

invalid application of 'sizeof' to a function type

(当然)。

如何修改它以使 value 包含 false

最佳答案

How can it be modified so that value will contain false?

任何问题都可以通过额外的间接层来解决。我们已经内置了其中一些。基本上,您希望仅在 T 时使用小检查。不是函数。已经有一个元函数:std::conditional .我们可以使用它来延迟评估。

小的检查,我们分离出它自己的元函数:

template <class T>
struct is_small
: std::integral_constant<bool, (sizeof(T) <= sizeof(void*))>
{ };

然后我们可以将你的条件改写为:

template <class T>
struct should_be_passed_by_value {
static constexpr bool value =
std::is_scalar<T>::value ||
std::is_array<T>::value ||
std::is_reference<T>::value ||
std::conditional_t<
std::is_function<T>::value,
std::false_type,
is_small<T>>::value;
};

这边,is_small<T>仅在 T 时实例化不是函数。

关于c++ - 如果 T 是一个函数,不要对 T 使用 sizeof,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41490912/

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