gpt4 book ai didi

c++ - 重构所有类通用的方法

转载 作者:太空狗 更新时间:2023-10-29 23:45:56 26 4
gpt4 key购买 nike

我有一个全局函数,可以将一个对象(或 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 );

虽然这可行,但我从未在任何地方看到过它,也不知道它是否可以接受。

我已经尝试将 partialCopy 成员函数放在一个公共(public)基类中并继承它,但这不起作用,因为 this 关键字将引用基类而不是派生类。

还有更好的选择吗?请指教。

编辑

John 的建议(在一个已被删除的线程中)我对 CRTP 基类中的派生类执行 static_cast 效果很好。 @John 请发布这个答案,我会这样标记它。

最佳答案

我将此作为答案发布,因为我认为这是合适的。不过,Henrik 首先发表了评论。 (不过,这也是我的第一个想法:))

常量引用

对源参数使用const& (const-reference)。这样它就很容易与目标区分开来。

额外的好处是它将验证并确保您的部分复制函数的常量正确性。

右值引用

您可能还会考虑为 Source&& 重载它。如果有一些直接复制的缓冲区,您的函数可能会使用它。

关于c++ - 重构所有类通用的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14832249/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com