相关疑难解决方法(0)

std :: forward <T>和std :: forward <decltype(t)>之间有什么区别?

这些功能相同吗?

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,有没有理由明确写出类型?

据我所知,TT&&两种不同的类型,但我认为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)

c++ perfect-forwarding c++11

20
推荐指数
1
解决办法
1610
查看次数

标签 统计

c++ ×1

c++11 ×1

perfect-forwarding ×1