从一种类型转换为另一种类型时的模板类型扣除
Template type deduction when converting from one type to another
我想为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
推导而来。
相关文章:
- 文本冒险游戏 - 如何区分一种项目类型与另一种项目类型以及如何构建项目类/子类
- 当 c++ 需要一种数据类型并获取另一种数据类型时会发生什么?
- 另一种类型的智能ptr,比如具有弱refs的unique_ptr
- void* 数组将元素转换为另一种类型
- 在 c++ 中将一种结构类型分配给另一种类型
- 将空基类优化对象强制转换为另一种类型是否会破坏严格的别名?
- 如何测试指针类型是否可以安全地转换为另一种指针类型?
- 将 32 位浮点数和不强制转换的 32 位整数与双精度进行比较,当其中一个值可能太大而无法完全适合另一种类型时
- 错误将结构复制到同一类型的另一种
- 何时与另一种类型兼容
- 将指向结构的指针转换为具有较少字段数的另一种结构类型
- 是否可以将一种函数类型转换为另一种采用相同参数但返回类型不同的函数类型
- 自动将一种 c++ 类型转换为另一种
- C 模板可以匹配(仅)一种类型的列表或另一种类型的列表
- 是否可以将一种类型的数组转换为大小不同的另一种类型的数组?
- 在比较中使用已强制转换为另一种类型的函数指针是否定义良好?
- 多态变体,并将一种类型的引用绑定到另一种类型的引用
- 如何使用模板元编程在 C++17 中将一种类型转换为另一种类型
- 将字符阵列施放到另一种类型中是否违反了严格的确定规则
- 创建一个从一种类型到另一种类型的别名