如何将模板函数的所有参数隐式转换为最高分辨率类型?

在我正在研究的项目中,我有一个类似于此的模板化函数,其中所有参数都应为T型

#include <iostream>

template<typename T> bool aWithinBOfC(T a, T b, T c)
{
    return std::abs(a - c) < b;
}

我遇到的问题是,如果所有参数的类型都不相同,则无法编译,但是在评估之前,应将相似的类型隐式转换为分辨率最高的类型似乎是合理的。有什么办法可以使这样的电话有效吗?

int main()
{
    double a{1.2};
    double b{1.4};
    float c{0.1f};

    std::cout << aWithinBOfC(a, b, c) << std::endl;
}
评论
Doyle
Doyle

遵循这些思路,也许是:

template<typename T>
bool aWithinBOfCImpl(T a, T b, T c) {
  /* actual implemenattion */
}

template <typename ... Args>
auto aWithinBOfC(Args... args) {
  return aWithinBOfCImpl<std::common_type_t<Args...>>(args...);
}

Demo

点赞
评论