-1

我想编写一些可用于 C++ 单元的模板化代码。例如,如果我计算一个浮点数的平方,我会得到一个浮点数,但为了使代码更通用并为单位做好准备,我认为我应该使用 auto 作为返回类型,以便将米作为输入变成米的平方作为输出,即

template<typename type_base>
auto squared(type_base const vin){
    return vin * vin;
}

我的问题是,如果我想使用“arg out”API,应该怎么做?我尝试了以下,但我的编译器抱怨。这是预期的吗?我应该做些什么来让我的编译器满意吗?这样做的首选方法是什么?

这个例子:

template<typename type_base>
void squared_2(type_base const & vin, auto & vout){
  vout = vin * vin;
}

更一般地说,在编译时有一种方法可以说自动输出(示例 1)或自动 vout(示例 2)的类型应该是 的类型type_base * type_base,这样事情就会受到更多的限制,并且我会检测到可能的实现问题在编译时函数的核心?

当然,在这种情况下并没有真正需要使用 arg_out,但我真正的用户案例具有更重的类型(它们是可能是单位的基本类型的模板)。

4

1 回答 1

2

您可以使用 decltype 以如下方式确定产品的结果:

#include <iostream>

template<typename type_base>
void squared_2(type_base const & vin, decltype(vin*vin) & vout){
    vout = vin * vin;
}


int main()
{
    double a;
    squared_2(5.,a);
    std::cout<<a<<std::endl;
}

于 2021-03-06T11:05:29.733 回答