这些功能相同吗?
template <class T>
void foo(T && t)
{
bar(std::forward<T>(t));
}
template <class T>
void foo2(T && t)
{
bar(std::forward<decltype(t)>(t));
}
template <class T>
void foo3(T && t)
{
bar(std::forward(t));
}
Run Code Online (Sandbox Code Playgroud)
如果是,我可以一直使用这个宏来完美转发吗?
#define MY_FORWARD(var) std::forward<decltype(var)>(var)
Run Code Online (Sandbox Code Playgroud)
或者只是使用
bar(std::forward(t));
Run Code Online (Sandbox Code Playgroud)
我相信foo2并且foo3是一样的,但是我发现人们总是像前进一样使用foo,有没有理由明确写出类型?
据我所知,T和T&&两种不同的类型,但我认为std::forward<T>并std::forward<T&&>始终给予同样的结果?
编辑:
我想使用宏的原因是我想在以下C++ 1y代码上保存一些打字,我在不同的地方有很多类似的代码
#define XLC_FORWARD_CAPTURE(var) var(std::forward<decltype(var)>(var))
#define XLC_MOVE_CAPTURE(var) var(std::move(var))
template <class T, class U>
auto foo(T && func, U && para )
{
auto val = // …Run Code Online (Sandbox Code Playgroud)