如何解决C ++中的enable_if模板类功能的介绍
我正在尝试为模板化的数学类生成准确的代码覆盖率。我默认使用here
中的技巧实例化模板类中的每个方法template class Vector2D<float>;
,因此覆盖率并不总是100%,而是向我显示从未调用过函数的位置。问题是,如果我走得更远并且使用 type traits (类型特征)来仅对某些类型启用模板化类的成员函数,则它们的覆盖率始终始终为100%。 gcov和llvm-cov 均显示未生成这些函数。 我猜是因为这些功能是模板类中自己的“模板”?
template<typename T>
class Vector2D {
...
template <class U = T>
typename std::enable_if<std::is_floating_point<U>::value,void>::type rotate(
T angle) {
...
}
};
我(默认)如何实例化这些功能,以便覆盖率报告如果从未调用过,将以橙色/红色显示?
解决方法
以与类相同的方式,可以显式实例化函数/方法:
template
typename std::enable_if<std::is_floating_point<F>::value,void>::type
Vector2D<float>::rotate<float>(float);
使用C ++ 20 requires
,使用:
template<typename T>
class Vector2D {
//...
void rotate(T angle) requires(std::is_floating_point<T>::value) {
//...
}
};
我希望只需要显式的类实例化。
,我最终显式实例化了模板成员函数(请参见this post)
template void Vector2D<float>::rotate<float>(float);
如果我确实未在代码中显式调用该函数,则覆盖率报告随后将该函数显示为从未调用(橙色/红色)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。