转换时出现奇怪的问题

发布于 2024-10-03 22:18:22 字数 1079 浏览 5 评论 0原文

在下面的代码中:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

对不⑦ 2024-10-10 22:18:22

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.

你与昨日 2024-10-10 22:18:22

您需要将值传递给 MakePair,而不是类型。试试这个:

int a = 1;
int b = 2;
auto tmp = MakePair( a, b ); // creates a Pair<int,int> with the values of a and b

You need to pass values to MakePair, not types. Try this:

int a = 1;
int b = 2;
auto tmp = MakePair( a, b ); // creates a Pair<int,int> with the values of a and b
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文