我有一个全局函数,可以将一个对象(或 type Source
)的相关位复制到另一个( type 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 );
}
};
现在的问题是成员函数必须复制到几十个类中。这是一个可以容忍的复制和粘贴编程案例吗?我考虑过放入partialCopy
一个头文件partialCopy.h
并使用预处理器包含将其“注入”到每个类中,如下所示:
struct Foo
{
#include "partialCopy.h"
};
Foo f;
Bar b;
f.partialCopy( b );
虽然这是可行的,但我从未在任何地方见过它,也不知道它是否不可接受。
我已经尝试将partialCopy
成员函数放在一个公共基类中并继承它,但这不起作用,因为this
关键字将引用基类而不是派生类。
有更好的选择吗?请指教。
编辑
John 的建议(在一个已被删除的线程中)我static_cast
对 CRTP 基类中的派生类执行一个很好的工作。@John 请发布这个答案,我会这样标记它。