如何消除类似的 ref-qualified 成员函数之间的代码重复?

3
如何在相似的const和non-const成员函数之间消除代码重复?类似,我想消除几乎相同的成员函数之间的代码重复,除了ref限定符之外。
假设我有一个类,像这样:
class MyStringBuilder
{
    std::string member;
public:
    // Other functions
    std::string create() const& {
        // Some work
        std::string result = member;
        // More work
        return result;
    }

    std::string create() && {
        // Some work
        std::string result = std::move(member);
        // More work
        return result;
    }
};

对于构建器对象,我们想要这样做并不是不可思议的,因为它可以节省一个副本,如果我们完成了MyStringBuilder的使用。

除了成员使用的地方外,const&版本和&&版本之间的代码是相同的。两个函数之间唯一的区别在于,&&版本在引用任何成员时都会std::move它们。

我该如何避免这种代码重复?


如果我们只有这个推导此提案就好了。 - Justin
1个回答

5

您可以做的一件事是,将逻辑实现为非成员函数,并将*this的类型作为模板参数:

class MyStringBuilder
{
    std::string member;

    template<typename Self>
    static std::string create_impl(Self&& self) {
        // Some work
        std::string result = std::forward<Self>(self).member;
        // More work
        return result;
    }
public:
    // Other functions
    std::string create() const& {
        return create_impl(*this);
    }

    std::string create() && {
        return create_impl(std::move(*this));
    }
};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接