函数输入参数的auto是函数模板的替代品吗?



在c++ 20中,auto关键字可用于函数输入参数。这是函数模板的合适替代品吗?在决定采用哪种方法时,是否有任何实际的差异需要考虑?

template <typename T>
void myFunction(T& arg)
{
// ...
}

void myFunction(auto& arg)
{
// ...
}

与这个老问题相关并借用了这个问题的代码

对于只有一个参数的函数,没有区别。对于多个参数,auto被独立地考虑为每个参数,即

template <typename T>
void myBinaryFunction(T& arg1, T& arg2);

auto没有简单的等价,因为arg1arg2必须推导为同一类型。

同样,非类型模板形参不能为auto
template <template <typename...> class Container, size_t N>
void convert(const std::array<int, N> & src, Container<int> & dest);

也不能键入参数

中没有的参数。
template <typename T>
T getById(int id);

最新更新