C 声明具有自动参数要转发
C++ decltype with auto parameters to forward
只是在此处发布以查看是否有人可以在更多的'liemans'解释中借用一些有用的信息。
我在stackoverflow上看到了很多关于em and distlype和auto之间的差异。但是,我要么没有单击足够的论坛帖子,要么根本不在那里。这是上周的一个测试问题,那时我无法弄清楚这一点,我在与Google和其他各种论坛度过了一段美好时光之后,我现在仍然非常模糊。
。为什么应该使用自动&&std ::转发它们的参数?
伪/示例代码为此是什么样的?
如果您在这里知道类似的帖子,我会很乐意朝着正确的方向提出重点:)
感谢您的帮助,谢谢!
给定lambda函数
auto f = [](auto&& arg) {
// ...
};
这大致相当于模板函数:
template<class Arg>
auto f(Arg&& arg)
{
// ...
}
请注意,在他们的模板函数中,我们有模板类型Arg
,我们可以使用该模板来转发参数arg
所以我们可以写
do_something(std::forward<Arg>(arg));
碰巧的是decltype(arg)
是Arg
。
我们可以替代:
do_something(std::forward<decltype(arg)>(arg));
在lambda中,我们没有模板类型Arg
,但是decltype(arg)
是等效的。
再次,相同的表达能够满足我们的目的:
auto f = [](auto&& arg) {
do_something(std::forward<decltype(arg)>(arg));
};
,或者我们对读者有点友善:
auto f = [](auto&& arg)
{
using arg_type = decltype(arg);
do_something(std::forward<arg_type>(arg));
};
相关文章:
- 是否可以在不扣除的情况下将模板参数转发到 make_*?
- 可变参数模板参数转发使用逗号运算符
- 如何通过可变参数模板将多个构造函数参数转发到数组初始值设定项列表?
- 将可变参数函数参数转发到 std::function 对象
- 我如何实现变异模式以将可变数量的参数转发到C 11中的函数
- 无临时实例的参数转发
- 如何将构造函数参数转发到 boost::optional
- 如何使包装类将其构造函数参数转发到 std::vector 的构造函数?
- 如何将 CMake 参数转发到外部项目
- 使用std::forward而不是将参数转发到另一个函数
- 使用declard和参数转发构造函数隐式复制结构
- 将可变参数模板参数转发到多个类成员
- Template()的参数转发使构造函数参数变为常量
- 我怎样才能完美地将参数转发到 STL 集合
- 如何在 C++11 中使用可变参数模板正确创建显式参数转发函数
- 使用默认参数转发引用
- 将可变模板参数转发到类似printf的函数
- static_cast的参数转发
- Boost.Program_options:将"--"后面的参数转发到另一个程序
- 将参数转发给模板成员函数