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

在我正在研究的项目中,我有一个类似于此的模板化函数,其中所有参数都应为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