我想为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本身是如何实现的: - )
答案 0 :(得分:3)
反转模板参数的顺序。
template <typename ToConvert, typename ForConvert>
ToConvert Convert(ForConvert val)
{
return static_cast<ToConvert> (val);
}
现在,如果你写
Convert<float>(x)
float
用于填写第一个模板参数ToConvert
,而ForConvert
是从x
推断出来的,因为它没有明确给出。< / p>