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

C++ 如何将模板函数的所有参数隐式转换为最高分辨率类型?,c++,templates,casting,C++,Templates,Casting,在我正在进行的一个项目中,我有一个类似于此的模板函数,其中所有参数都应该是T类型 #include <iostream> template<typename T> bool aWithinBOfC(T a, T b, T c) { return std::abs(a - c) < b; } #包括 模板bool aWithinBOfC(T a、T b、T c) { 返回标准::abs(a-c)

在我正在进行的一个项目中,我有一个类似于此的模板函数,其中所有参数都应该是T类型

#include <iostream>

template<typename T> bool aWithinBOfC(T a, T b, T c)
{
    return std::abs(a - c) < b;
}
#包括
模板bool aWithinBOfC(T a、T b、T c)
{
返回标准::abs(a-c)
我遇到的问题是,如果所有参数都不是同一类型,它将无法编译,但它应该隐式地转换类似于计算前分辨率最高的类型,这似乎是合理的。有没有办法让这样的电话有效

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

    std::cout << aWithinBOfC(a, b, c) << std::endl;
}
intmain()
{
双a{1.2};
双b{1.4};
浮点数c{0.1f};

std::cout大概是这样的:

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...);
}
模板
bool Awitinbofcimpl(T a、T b、T c){
/*实际执行*/
}
模板
自动aWithinBOfC(Args…Args){

return aWithinBOfCImpl您不需要在调用站点进行隐式转换。编译器将隐式地将类型转换为return语句中表达式中最大的类型

template <class T, class U, class V>
bool aWithinBOfC(T a, U b, V c) {
    return std::abs(a - c) < b;
}
模板
bool aWithinBOfC(T a、U b、V c){
返回标准::abs(a-c)
这并没有解决这个问题,但没有隐式转换。转换是您在源代码中编写的告诉编译器进行转换的东西。您希望编译器进行隐式转换。这是我最初的想法,但我想知道是否有更干净的方法只使用一种模板类型,而不是像我一样从Igor的回答中可以看出,这似乎只会变得更加复杂。ThanksIt很高兴看到可以做到这一点,但我认为我将使用具有多种类型的模板来保持整洁。谢谢。