内部でEIGENを使用するAPIを設計したい。
http://eigen.tuxfamily.org/dox/TopicPassingByValue.htmlに基づいて、クラスにメンバーとしてEigenオブジェクトがある場合、値で渡すことはできません。
コンパイラ(g ++など)にオブジェクトを値で渡せないことを伝える簡単な方法はありますか?
内部でEIGENを使用するAPIを設計したい。
http://eigen.tuxfamily.org/dox/TopicPassingByValue.htmlに基づいて、クラスにメンバーとしてEigenオブジェクトがある場合、値で渡すことはできません。
コンパイラ(g ++など)にオブジェクトを値で渡せないことを伝える簡単な方法はありますか?
コピーコンストラクターを使用不可にすることができます。これは、Boostを使用してから継承するboost::noncopyable
か、コピーコンストラクターをプライベートにすることで実現できます。
struct Foo
{
private:
Foo(Foo const &) { }
};
または、新しいC ++では、明示的に削除して次のようにします。
struct Foo
{
Foo(Foo const &) = delete;
Foo(Foo &&) = delete;
};
おそらく、代入演算子にも同じことをして、クラスを代入できないようにする必要があります(boost::noncopyable
これはあなたに代わって処理します)。
C ++オブジェクトがコピーされないようにするには、コピーコンストラクターと代入演算子を宣言しますが、これらの関数はプライベートにします。(何も呼び出されないので、わざわざ実装する必要はありません。)
あなたが引用した文書は偽物に見えます。このEigen::Vector2d
オブジェクトが元のオブジェクトで適切な配置を実現できるのはどうしてですか。また、コピーオブジェクトが同じ配置にならないのはなぜですか。
それが意味をなすために必要な特別な情報は与えられていません。
コピーコンストラクタ/コピー演算子をプライベートにするだけです。