我有一个全局函数,它将一个对象(或类型为Source
)的相关位复制到另一个对象(类型为Target
),如下所示:
template<typename Source , typename Target>
void partialCopy( Source& source , Target& target )
{
// perform copy
}
我发现全局函数存在的问题是,与成员函数不同,编码两个参数中的哪个是源,哪个是目标时,并不清楚。因此,我希望每个类在中都有一个成员函数
partialCopy()
,如下所示:struct Foo
{
template<typename T>
void partialCopy( T& target )
{
::partialCopy( *this , target );
}
};
现在的问题是成员函数必须复制到数十个类中。这是copy and paste programming可以容忍的情况吗?我考虑过将
partialCopy
放在头文件partialCopy.h
中,并使用预处理器include将其“注入(inject)”到每个类中,如下所示:struct Foo
{
#include "partialCopy.h"
};
Foo f;
Bar b;
f.partialCopy( b );
尽管此方法有效,但我从未见过在任何地方完成它,也不知道它是否 Not Acceptable 。
我已经尝试过将
partialCopy
成员函数放在一个通用的基类中并继承它,但这不起作用,因为this
关键字随后将引用基类,而不是派生类。还有更好的选择吗?请指教。
编辑
John的建议(在已删除的线程中)是我对CRTP基类中的派生类执行
static_cast
,效果很好。 @John,请将此答案发布给我,我会这样标记。 最佳答案
我将其发布为答案,因为我认为这是适当的。亨里克首先发表评论。 (但是,这也是我的第一个想法:)
常量引用
使用const&
(常量引用)作为源参数。这样就很容易与目标区分开。
额外的好处是它将验证并确保部分复制功能的const正确性。
右值引用
您可能还会考虑为Source&&
重载它。如果有一些直接复制的缓冲区,则您的函数可能会使用它。
关于c++ - 重构所有类通用的方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14832249/