从一种类型转换为另一种类型时的模板类型推导

时间:2014-08-06 03:25:15

标签: c++ templates type-deduction

我想为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本身是如何实现的: - )

1 个答案:

答案 0 :(得分:3)

反转模板参数的顺序。

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

现在,如果你写

Convert<float>(x)

float用于填写第一个模板参数ToConvert,而ForConvert是从x推断出来的,因为它没有明确给出。< / p>

相关问题