【问题标题】:Template type deduction when converting from one type to another从一种类型转换为另一种类型时的模板类型扣除
【发布时间】:2014-08-06 03:25:15
【问题描述】:

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

【问题讨论】:

    标签: c++ templates type-deduction


    【解决方案1】:

    反转模板参数的顺序。

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

    现在如果你写

    Convert<float>(x)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-28
      • 2011-09-24
      • 1970-01-01
      • 2020-12-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多