gpt4 book ai didi

C++ 如何使 templatef() 为整数 T 返回 -1,为指针类型返回 nullptr

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:52 27 4
gpt4 key购买 nike

我需要完成以下任务:

template<typename T>
f() {
:
return { -1 if T is of integral type, else nullptr }
}

在我的特定用例中,T 可以是四种类型之一:

int
Py_ssize_t // ssize_t
Py_hash_t // ssize_t

PyObject* // PyObject is some C struct

这是我迄今为止最好的解决方案:

template<typename T>
T test(typename enable_if<is_integral<T>::value, void*>::type = nullptr)
{ return -1; }

template<typename T>
T test(typename enable_if<is_pointer<T>::value, void*>::type = nullptr)
{ return nullptr; }

ideone

但这是用大锤敲坚果吗?

我唯一的反对意见是它解决了更广泛的问题范围,但我不确定如果不额外摆弄 std::decay 它是否完整。

我习惯于抵制复杂化代码的诱惑,这样它也可以解决手头问题范围的假想扩展。

但在这种情况下,我看不到更简单的解决方案。

最佳答案

不要想太多。您可以简单地使用:

template<typename T>
T f() { return std::is_integral<T>::value ? T(-1) : T(0); }

如果 T 是指针类型,这甚至适用于 T(-1) 转换,因为该转换只能在运行时未定义,而不能在编译时定义-time,但在运行时从未真正执行过。

关于C++ 如何使 template<T>f() 为整数 T 返回 -1,为指针类型返回 nullptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27621784/

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