【问题标题】:How do I remove code duplication between similar ref-qualified member functions?如何删除类似的 ref 限定成员函数之间的代码重复?
【发布时间】:2017-11-22 11:33:09
【问题描述】:

类似于How do I remove code duplication between similar const and non-const member functions?,我想删除几乎相同的成员函数之间的代码重复,除了 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::moves 任何成员,只要它们被引用。

如何避免这种代码重复?

【问题讨论】:

标签: c++ c++11 dry code-duplication ref-qualifier


【解决方案1】:

您可以做的一件事是您可以在非成员函数中实现逻辑并将*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));
    }
};

【讨论】:

    猜你喜欢
    • 2010-09-12
    • 2013-11-03
    • 1970-01-01
    • 2017-06-29
    • 1970-01-01
    • 2016-03-13
    • 2013-10-28
    • 1970-01-01
    相关资源
    最近更新 更多