首页 > 解决方案 > 转换为相同基础类型时的特征行为

问题描述

我有一个模板类,MyClass<...>它具有类型的成员变量,Eigen::Matrix<X, N, M>其中X是特定实例的本机模板参数MyClass

假设我上述类型的私有变量是myVar. 为了使setMyVar函数通用,我将其定义为模板函数,如

  template <typename U>
  void setMyVar(const Eigen::Matrix<U, 3, 1>& newVal) const { 
     // myVar is of type Eigen::Matrix<T, 3, 1>
     myVar = newVal.cast<T>();
  }

我的问题是 Eigen 是否跳过铸造操作以防万一T == U

我对学习 Eigen 在这种情况下的行为特别感兴趣。否则,我非常了解替代解决方案,例如使用 SFINAE 强制编译器在正确的重载中进行选择setMyVar或使用if constexp (std::is_same_v<T, U) {...} else {...} (对于 c++17)来决定在编译期间是否需要强制转换。

谢谢

标签: c++castingeigen3

解决方案


推荐阅读