c++ - 类型检查的编译时间失败

标签 c++ c++17

我对模板的理解是当我写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()

关于c++ - 类型检查的编译时间失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57019189/

相关文章:

c++ - 从文本文件中读取不同数量的值到数组中

python - 将 openCV python 函数转换为 C++

C++ constexpr 重载具有相同名称的构造函数

c++ - 只有公共(public)静态方法的帮助类

c++ - 左值引用是否需要进行左值到右值的转换?

c++ - "if constexpr"在模板之外有用吗?

c++ - 模板化成员函数和继承

c++ - 接收整数,但也想测试 char

c++ - 菱形继承(钻石问题)——调用所有父函数

c++ - 隐式模板推导指南可以推导引用类型吗?