带有自动参数转发的 C++ decltype
C++ decltype with auto parameters to forward
只是 post 来这里看看是否有人可以提供一些有用的信息以进行更“外行”的解释。
我在 Whosebug 上看到了很多关于 decltype 和 auto 之间的区别。但是,我要么没有点击足够多的论坛 posts,要么根本不存在。这是上周的一道测试题,当时我一辈子都弄不明白,在 Google 和其他各种论坛上度过了一段美好的时光后,我现在对细节仍然非常模糊。
为什么要使用带有 auto&& 参数的 decltype 来 std::forward 它们?
pseudo/example 代码是什么样的?
如果你知道这里有类似的 post,我会很高兴地指出正确的方向:)
感谢您的帮助,谢谢!
给定 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));
};
或者我们可以对 reader 友善一点:
auto f = [](auto&& arg)
{
using arg_type = decltype(arg);
do_something(std::forward<arg_type>(arg));
};
只是 post 来这里看看是否有人可以提供一些有用的信息以进行更“外行”的解释。
我在 Whosebug 上看到了很多关于 decltype 和 auto 之间的区别。但是,我要么没有点击足够多的论坛 posts,要么根本不存在。这是上周的一道测试题,当时我一辈子都弄不明白,在 Google 和其他各种论坛上度过了一段美好的时光后,我现在对细节仍然非常模糊。
为什么要使用带有 auto&& 参数的 decltype 来 std::forward 它们?
pseudo/example 代码是什么样的?
如果你知道这里有类似的 post,我会很高兴地指出正确的方向:)
感谢您的帮助,谢谢!
给定 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));
};
或者我们可以对 reader 友善一点:
auto f = [](auto&& arg)
{
using arg_type = decltype(arg);
do_something(std::forward<arg_type>(arg));
};