从一种类型转换为另一种类型时的模板类型扣除

Template type deduction when converting from one type to another

本文关键字:类型 另一种 类型转换 一种      更新时间:2023-10-16

我想为static_cast操作符编写一个简单的包装器。我的第一次尝试是相同的,如下所示:

template <typename ForConvert, typename ToConvert>
ToConvert Convert(ForConvert val)
{
    return static_cast<ToConvert> (val);
}

现在我可以使用

auto x = 25;
auto y = Convert<int, float>(x);

是否有一种方法ForConvert部分是隐式的?我希望能够像这样使用转换函数:

auto x = 25;
auto y = Convert<float>(x);

是否有一种方法/技术(在定义模板函数时)使编译器能够推断x的类型,以便我不应该明确指定它?在某种程度上,我认为我在问static_cast本身是如何实现的:-)

将模板参数的顺序颠倒。

template <typename ToConvert, typename ForConvert>
ToConvert Convert(ForConvert val)
{
    return static_cast<ToConvert> (val);
}

现在如果你写

Convert<float>(x)

float填充第一个模板参数ToConvert, ForConvert由于没有明确给出,由x推导而来。

相关文章: