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うまく機能します。@ジョンはこれに回答を投稿してください。そのようにマークします。