c++ - C++中表达式的命名类型
问题描述
这里的 typename 表达式不起作用。编译器说:
“在 '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。有任何想法吗?
解决方案
正确的方法是:
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;
编译为表达式,但导致了一些其他编译错误,可能是因为元素类型是一些不应该的引用或类似的东西。
推荐阅读
- javascript - 如何将 Angular 8 项目构建为 .war 文件
- json - Google Sheets ImportJSON 返回错误 SyntaxError: Unexpected token: < (line 165)
- vue.js - 如何在 vuejs 中为自己的键赋值
- jquery - 检索 json 并放入文本框
- sorting - 如何根据第四列选择包含每个 ID 的指数值的最小值?
- python - Python将sql数据字符串转换为列表
- maximo - 更新服务地址时调用自动脚本(具有 WO 对象启动点)?
- javascript - 如何在承诺中检索数组值?(未捕获(承诺中)TypeError:无法读取未定义的属性“tabId”)
- php - 用于汇总多个计数数据的 MySQL 语法
- sql - 如何更新 AWS Athena 表中的列