C++ 如何消除类似ref限定成员函数之间的代码重复?

C++ 如何消除类似ref限定成员函数之间的代码重复?,c++,c++11,dry,code-duplication,ref-qualifier,C++,C++11,Dry,Code Duplication,Ref Qualifier,与类似,我希望消除几乎相同的成员函数之间的代码重复,除了ref限定符 假设我有一个类似这样的课程: class MyStringBuilder { std::string member; public: // Other functions std::string create() const& { // Some work std::string result = member; // More work

与类似,我希望消除几乎相同的成员函数之间的代码重复,除了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
在引用任何成员时都会将其删除


如何避免这种代码重复?

您可以做的一件事是在非成员函数中实现逻辑,并将
*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));
    }
};
类MyStringBuilder
{
std::字符串成员;
模板
静态标准::字符串创建\u impl(Self&&Self){
//一些工作
std::string result=std::forward(self).member;
//更多工作
返回结果;
}
公众:
//其他职能
std::string create()const&{
返回create_impl(*this);
}
std::string create()&&{
返回create_impl(std::move(*this));
}
};
如果我们有这个提议就好了