Source
次のように、あるオブジェクト (または type ) の関連ビットを別の ( type の) にコピーするグローバル関数がありますTarget
。
template<typename Source , typename Target>
void partialCopy( Source& source , Target& target )
{
// perform copy
}
グローバル関数で私が見つけた問題は、メンバー関数とは異なり、2 つの引数のどちらがソースでどちらがターゲットかをコーディングするときにすぐに明確にならないことです。したがって、次のよう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
キーワードが派生クラスではなく基本クラスを参照するため、これは機能しません。
さらに良い代替手段はありますか?お知らせ下さい。
編集
CRTP基本クラスの派生クラスに対して実行するというジョンの提案(削除されたスレッドで)はstatic_cast
うまく機能します。@ジョンはこれに回答を投稿してください。そのようにマークします。