Jus*_*tin 2 c++ code-duplication c++11 ref-qualifier
与如何删除相似的const和非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;
}
};
Run Code Online (Sandbox Code Playgroud)
我们想对一个构建器对象执行此操作并非不可想象,因为如果使用完成,它将保存一个副本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));
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |