2

内部でEIGENを使用するAPIを設計したい。

http://eigen.tuxfamily.org/dox/TopicPassingByValue.htmlに基づいて、クラスにメンバーとしてEigenオブジェクトがある場合、値で渡すことはできません。

コンパイラ(g ++など)にオブジェクトを値で渡せないことを伝える簡単な方法はありますか?

4

3 に答える 3

6

コピーコンストラクターを使用不可にすることができます。これは、Boostを使用してから継承するboost::noncopyableか、コピーコンストラクターをプライベートにすることで実現できます。

struct Foo
{
private:
    Foo(Foo const &) { }
};

または、新しいC ++では、明示的に削除して次のようにします。

struct Foo
{
    Foo(Foo const &) = delete;
    Foo(Foo &&)      = delete;
};

おそらく、代入演算子にも同じことをして、クラスを代入できないようにする必要があります(boost::noncopyableこれはあなたに代わって処理します)。

于 2012-05-18T21:16:10.260 に答える
2

C ++オブジェクトがコピーされないようにするには、コピーコンストラクターと代入演算子を宣言しますが、これらの関数はプライベートにします。(何も呼び出されないので、わざわざ実装する必要はありません。)

あなたが引用した文書は偽物に見えます。このEigen::Vector2dオブジェクトが元のオブジェクトで適切な配置を実現できるのはどうしてですか。また、コピーオブジェクトが同じ配置にならないのはなぜですか。

それが意味をなすために必要な特別な情報は与えられていません。

于 2012-05-18T21:16:00.380 に答える
0

コピーコンストラクタ/コピー演算子をプライベートにするだけです。

于 2012-05-18T21:15:48.647 に答える