【发布时间】:2020-06-30 08:42:18
【问题描述】:
编写缩写函数模板的最佳实践是什么?
我了解,从 C++20 开始,以下是有效代码:
void f(auto&& val) {...}
是否必须使用 decltype(auto) 作为此类函数的返回类型? 特别是,下面的代码是编写缩写函数模板的正确方法吗?
decltype(auto) f(auto&& val) {return std::forward<decltype(val)>(val+=2);}
- 我应该如何专门化上述功能?
//something like this?:
template<> decltype(auto) f<MyClass>(MyClass& val) {...}
【问题讨论】:
-
void f(auto&& val) {...}不是有效代码。 -
@Axalo - 这是由于 C++20 标签
-
@Axalo 是,从 C++20 开始。忽略
...,即。 -
@StoryTeller-UnslanderMonica 我相信前两个问题是相同的(基本上我只是在第一个问题的第二个问题中给出了一个“默认”示例)。第三个问题我会去掉,单独问。
-
@StoryTeller-UnslanderMonica 我已经得到了几个答案,所以我将保持原样。下次我会试着问一个更中肯的问题。