【发布时间】:2018-02-15 07:03:13
【问题描述】:
我有一些带有函数的类。在所有类中,函数具有相同的名称和参数类型,但返回类型不同。我需要一个模板函数,它可以自动检测正确的模板替换而无需尖括号。
说明问题的测试代码:
struct Float
{
static Float convert(int i)
{
return Float{static_cast<float>(i)};
}
float _f;
};
struct Int
{
static Int convert(int i)
{
return Int{i};
}
int _i;
};
template<typename T>
T convert(int i)
{
return T::convert(i);
}
int main()
{
Float f1 = convert<Float>(10);
Int i1 = convert<Int>(10);
// Float f2 = convert(10); compilation error
// Int i2 = convert(10); compilation error
return 0;
}
附:模板让我疯狂我想要但无法理解它们。
【问题讨论】:
-
模板选择“不带尖括号”需要参数推导。函数的返回类型不是参数。所以你可以放心,你不能从这里到达那里。