c++ - 类型检查的编译时间失败
问题描述
我对模板的理解是,当我编写void foo<T>(T x) {...}
和调用时foo<int>(x);
,foo<float>(x)
会生成foo(int x)
和foo(float x)
.
我想要的是在一些比较之前进行类型检查,但是由于编译器会生成两个版本的函数,所以比较部分会在编译时失败。
我的代码是
template <typename T>
void print(const std::vector<std::vector<T>>& matrix) {
std::cout << std::setprecision(3) << std::fixed;
for (int j=0; j < matrix[0].size(); j++) {
for (int i=0; i < matrix.size(); i++) {
// Fail on this line ↓
if ((std::is_floating_point<T>::value) &&
(matrix[i][j] == std::numeric_limits<float>::lowest())) {
std::cout << "✗ ";
continue;
}
std::cout << matrix[i][j] << " ";
}
}
std::cout << "\n";
}
在我调用的其他文件上
util::print<float>(best_value);
util::print<Point>(best_policy);
宣言
std::vector<std::vector<float>> best_value;
std::vector<std::vector<Point>> best_policy;
我应该如何在保留功能的同时解决该问题print
并且不必添加和之间的Point
比较float
?
解决方案
只需更改std::numeric_limits<float>::lowest()
为std::numeric_limits<T>::lowest()
推荐阅读
- json - 如何在 Scala 中序列化和反序列化 Json 的特征?
- python - 具有优化性能的 HDD 上 40 TB FIFO
- xcode - 无法将 pod 文件添加到 Xcode 13 项目
- git - 使用本地挂钩更改 --push-option
- r - 从几何中添加城市名称
- javascript - rails选择数量javascript获取类不工作索引
- java - 如何在swing jtable中仅编辑第一行和最后一列单元格(不是所有单元格)的一个单元格
- python - 我正在将 Discord 机器人转换为 Python,但我的命令中不断出现错误 帮助我
- maven - 如何使用 Maven Surefire 插件调用 JUnit5 测试运行程序/Junit 标记表达式?
- azure - 如何在整个 Azure 管理组上运行 powershell 脚本以跨越多个订阅?