のコンパイラによって合成されるデフォルトのコピーコンストラクタは、それ自身を定義しないクラスが正しいことを行います: すべてのメンバをあるオブジェクトから別のオブジェクトにコピーします。C++コンパイラはどのようにデフォルトのコピーコンストラクタを合成するのですか
私は似たようなことをしたい。私はメソッドを書こうとしています
template <typename T>
T f(const T& obj) {
// for each member var i of obj, I want to call some method g(obj.i)
}
メンバー変数の名前が何であるか分かりません。これがコピーコンストラクタ だった場合、gの代りに代入演算子を呼び出すことができました。
明らかにコンパイラはこれを行います(ただし、これは、クラスのメンバー名を と推測した後に行われます)。どんなクラスTでも を実行することは可能ですか?
もしそれがPODなら、なぜmemcpyを使用しないのですか? – marcinj
@luskan:アイデアは、各メンバをコピーするのではなく、各メンバに任意の関数 'g'を呼び出すことです。 –
いいえ、残念なことに、自分で定義したときにデフォルトのコピーコンストラクタの機能を取り戻すことはできません –