我有一个全局函数,它将一个对象(或类型为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/

10-09 05:30