转换时出现奇怪的问题
在下面的代码中:
template<class Key, class Value>
class Pair
{
private:
std::pair<Key,Value> body_;
public:
//No cpy ctor - this generated by compiler is OK
Pair(Key&& key,Value&& value)
{
body_.first = key;
body_.second = value;
}
Pair(Pair<Key,Value>&& tmpPattern)
{
body_.swap(tmpPattern.body_);
}
Pair& operator=(Pair<Key,Value> tmpPattern)
{
body_.swap(tmpPattern.body_);
return *this;
}
};
template<class Key, class Value>
Pair<Key,Value> MakePair(Key&& key, Value&& value)
{
return Pair<Key,Value>(key,value);
}
由于某些奇怪的原因,当我尝试运行 MakePair 时出现错误,为什么?天知道...
int main(int argc, char** argv)
{
auto tmp = MakePair(1, 2);
}
这是这个错误:
错误错误C2665:Pair::Pair':3个重载中没有一个可以转换所有参数类型
我只是不明白要执行什么转换?
In code below:
template<class Key, class Value>
class Pair
{
private:
std::pair<Key,Value> body_;
public:
//No cpy ctor - this generated by compiler is OK
Pair(Key&& key,Value&& value)
{
body_.first = key;
body_.second = value;
}
Pair(Pair<Key,Value>&& tmpPattern)
{
body_.swap(tmpPattern.body_);
}
Pair& operator=(Pair<Key,Value> tmpPattern)
{
body_.swap(tmpPattern.body_);
return *this;
}
};
template<class Key, class Value>
Pair<Key,Value> MakePair(Key&& key, Value&& value)
{
return Pair<Key,Value>(key,value);
}
For some bizzare reason I'm getting error when I try to run MakePair, why? God knows...
int main(int argc, char** argv)
{
auto tmp = MakePair(1, 2);
}
This is this error:
Error error C2665: Pair::Pair' : none of the 3 overloads could convert all the argument types
I just don't understand what conversion there is to be performed?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
return Pair(std::forward(key),std::forward(value));
虽然我不太确定为什么右值转发是'隐含的。
编辑:哦,我想我明白了。这样您仍然可以将右值引用传递给接受值的函数。
return Pair<Key,Value>(std::forward<Key>(key),std::forward<Value>(value));
Although I'm not really sure why rvalue forwarding isn't implicit.
Edit: Oh, I guess I got it. This way you can still pass a rvalue reference to a function that takes value.
您需要将值传递给
MakePair
,而不是类型。试试这个:You need to pass values to
MakePair
, not types. Try this: