小编Ste*_*ler的帖子

我是否需要重载接受rvalue引用的const左值引用的方法?

目前我正在玩rvalue引用(C++ 11,g ++与gnu ++ x0),我想在我的类中实现移动语义,因为它感觉"正确".

我是否需要重载通常接受const左值引用的每个函数以从rvalue引用中获益?

让我们说这是我的示例类:

class Person {
public:
    Person() = default;
    Person(std::string &name);
    Person(const Person &rhs);
    Person(Person &&rhs);

    Person& operator=(const Person &rhs);
    Person& operator=(Person &&rhs);

    std::string& get_name() const;
    void set_name(const std::string &name);
private:
    std::string name_;
}

/* snip */

void Person::set_name(const std::string &name)
{
    this->name_ = name;
}
Run Code Online (Sandbox Code Playgroud)

我现在想要使用带有右值引用的setter并消除不必要的副本.

Person test("Jon Doe");
test.set_name("Jon Doe2");
Run Code Online (Sandbox Code Playgroud)

我真的需要以这种方式重载每个方法吗?

void Person::set_name(std::string &&name)
{
    this->name_ = std::move(name);
}
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎很多余.有没有办法实现这个更容易?

谢谢!

(我经常阅读stackoverflow,但这是我的第一个问题.所以如果我做错了,请告诉我.)

c++ overloading rvalue-reference

5
推荐指数
1
解决办法
1006
查看次数

HXT:在 Haskell 中使用 HXT 按位置选择节点?

我正在尝试使用 Haskell 解析一些 XML 文件。对于这项工作,我使用HXT来获取有关实际应用中箭头的一些知识。所以我对箭头主题很陌生。

在 XPath (和HaXml)中,可以按位置选择节点,例如:/root/a[2]/b

即使在一遍又一遍地阅读文档之后,我也无法弄清楚如何使用 HXT 做类似的事情。

这是我正在使用的一些示例代码:

module Main where

import Text.XML.HXT.Core

testXml :: String
testXml = unlines
    [ "<?xml version=\"1.0\"?>"
    , "<root>"
    , "    <a>"
    , "        <b>first element</b>"
    , "        <b>second element</b>"
    , "    </a>"
    , "    <a>"
    , "        <b>third element</b>"
    , "    </a>"
    , "    <a>"
    , "        <b>fourth element</b>"
    , "        <b>enough...</b>"
    , "    </a>"
    , "</root>"
    ]

selector :: ArrowXml a => a XmlTree …
Run Code Online (Sandbox Code Playgroud)

haskell arrows hxt

5
推荐指数
1
解决办法
557
查看次数

标签 统计

arrows ×1

c++ ×1

haskell ×1

hxt ×1

overloading ×1

rvalue-reference ×1