我试图创建将返回包含两种数据类型,其中第一种类型是始终不变的对的功能,但第二个是模板类型。这甚至有可能吗? (我也想知道我对std::forward
使用的理解是否正确)。为了更好地展示我的问题,我将向您展示我的(不工作的)代码的简化示例。返回的std :: make_pair使用的std ::向前
这里是我的尝试:
template <class X>
std::pair<int, X> func(X&& second)
{
int first = 1;
return std::make_pair(std::move(first), std::forward<X>(second));
}
内部功能,创建变量first
,然后我要回对。这里我移动first
- 以避免复制 - (根据斯科特迈耶斯的讲座,他解释std::forward
是一个“有条件的移动”),取决于参数second
是否为l值,我想通过second
作为l值(让std::make_pair
second
的副本,创建对时)或者如果它是r值,我想通过“移动”的r值。
不幸的是我的代码不能正常工作。我想我一定误解了一些东西,但我不知道是什么,请你解释一下吗?
“我的代码不能正常工作” - 什么不起作用?什么是错误信息? – Rakete1111
@ Rakete1111的问题传递到FUNC -1-值参数 - 它是由'的std :: make_pair'作为参考推导出。问题解决了谢谢skypjack。 – mdjdrn1
@ mdjdrn1无论如何Rakete1111是正确的,请注意并下次将错误消息与您的问题一起发布。它会帮助那些来帮忙的人。 ;-) – skypjack