Olu*_*ide 2 c++ refactoring templates member-functions
我有一个全局函数将一个对象(或类型Source)的相关位复制到另一个(类型Target),如下所示:
template<typename Source , typename Target>
void partialCopy( Source& source , Target& target )
{
// perform copy
}
Run Code Online (Sandbox Code Playgroud)
我发现全局函数的问题在于,与成员函数不同,编码两个参数中的哪一个是源,哪个是目标时,不能立即清楚.因此,我想partialCopy()在每个类中都有一个成员函数,如下所示:
struct Foo
{
template<typename T>
void partialCopy( T& target )
{
::partialCopy( *this , target );
}
};
Run Code Online (Sandbox Code Playgroud)
现在的问题是必须将成员函数复制到几十个类.这是一个可以容忍的复制和粘贴编程案例吗?我已经考虑过放入partialCopy一个头文件partialCopy.h并使用预处理器include将它'注入'到每个类中,如下所示:
struct Foo
{
#include "partialCopy.h"
};
Foo f;
Bar b;
f.partialCopy( b );
Run Code Online (Sandbox Code Playgroud)
虽然这是有效的,但我从未在任何地方看到它,也不知道它是否不可接受.
我已经尝试将partialCopy成员函数放在公共基类中并继承它但这不起作用,因为this关键字将引用基类而不是派生类.
还有更好的选择吗?请指教.
编辑
我static_cast在一个CRTP基类中对派生类执行a的John的建议(在一个被删除的线程中)可以很好地工作.@John请发一个答案,我会这样标记.
我发布这个作为答案,因为在我看来这是合适的.不过Henrik首先评论道.(但是,这也是我的第一个想法:))
const&对源参数使用(const-reference).这样,它很容易与目标区分开来.
额外的好处是它将验证并确保部分复制功能的正确性.
你也可以考虑重载它Source&&.如果有一些直接复制的缓冲区,您的函数可能会使用它.