gpt4 book ai didi

c++ - 无论如何在模板参数上有一个decltype?

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

快速提问。如果我有像

这样的函数签名
template <typename T, typename ItType>
ItType binarySearch ( T mid, ItType first, ItType last );

有没有办法做类似下面的事情?我知道这种语法不正确,但你明白了,因为我可以做一个类似于常规函数的 decltype,见下文。编译器在编译时知道 ItType 的类型,所以它不应该也能推断出 *ItType 的类型吗?

template <typename ItType>
ItType binarySearch ( decltype(*ItType) mid, ItType first, ItType last );


// lambda
auto p = v.begin() + (v.end() - v.begin())/2;
std::partition ( v.begin(), v.end(), [p](decltype(*p) i) { return i < *p; } )

最佳答案

问题

decltype(*ItType)

*ItType 不是一个有效的表达式。一个天真的方法可能是这样的:

decltype(*ItType())

如果 ItType 是默认可构造的,那将起作用。由于您不想强制执行,您可以使用 std::declval “调用”一个假装返回 ItType 实例的函数:

decltype(*std::declval<ItType>())

此函数仅声明但从未定义,这意味着您不能真正调用它,但这并不重要,因为您在 decltype() 中使用它,这是一个未计算的上下文。

关于c++ - 无论如何在模板参数上有一个decltype?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19736502/

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