此处的类型名称表达式不起作用。 编译器说:
“在'typename'之后期望一个限定名称”。
template <typename Iterator, typename Predicate>
void mergeSort(Iterator start, Iterator end, Predicate lessThan)
{ typename typeid(start[0]) Element;
[...implementation, not relevant...]
}
我试图定义一个类型名称Element,该类型名称将引用表达式start[0]
的类型。 (或者通常是Iterator
的元素类型。)。我正在使用C ++ 17。有什么想法吗?
答案 0 :(得分:0)
执行此操作的正确方法是:
template <typename Iterator, typename Predicate>
void mergeSort(Iterator start, Iterator end, Predicate lessThan)
{ typedef typename std::iterator_traits<Iterator>::value_type Element;
}
使用以下内容:
typedef decltype(start[0]) Element;
被编译为一个表达式,但是导致了其他一些编译错误,可能是因为元素类型是某种引用,而不应该是这种引用。