反正是否有模板参数的decltype?

时间:2013-11-01 22:36:08

标签: c++ c++11 decltype

快速提问。如果我有像

这样的功能签名
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; } )

1 个答案:

答案 0 :(得分:1)

的问题
decltype(*ItType)

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

decltype(*ItType())
如果 ItType是默认可构造的,

将起作用。由于您不想强制执行,您可以使用std::declval“调用”假装返回ItType实例的函数:

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

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