嗯……
1) 以下代码目前不是合法的 C++ 代码;也许在未来(C++20?)但直到 C++17
auto sum(const auto& x1, const auto& x2)
{
return x1 + x2;
}
2)这是一个有效的代码(但仅来自 C++14)你的模板代码
template<class X1, class X2> auto sum1(const X1& x1, const X2& x2)
{
return x1 + x2;
}
3) 一个有效的替代方案是 generic-lambda(也来自 C++14)
[](auto const & x1, auto const & x2){ return x1+x2; }
4) 在 C++11 中,您不能简单地auto
将其用于返回类型,但您必须使用尾随返回类型来明确它;例如,decltype()
在以下代码中
template<class X1, class X2>
auto sum1 (X1 const & x1, X2 const & x2)
-> decltype( x1+x2 )
{ return x1 + x2; }
或者也没有auto
template<class X1, class X2>
decltype( std::declval<X1 const>() + std::declval<X2 const>() )
sum1 (X1 const & x1, X2 const & x2)
{ return x1 + x2; }
5) generic-lambda 可以(大致)替换函数模板,但是,从 C++20 开始,lambda 函数本身可以(可能)是一个模板,其语法如下
[]<typename X1, typename X2>(X1 const & x1, X2 const &x2){ return x1+x2) }