2

我想设计一个内部使用 EIGEN 的 API。

基于http://eigen.tuxfamily.org/dox/TopicPassingByValue.html,如果一个类有一个 Eigen 对象作为成员,它不能通过值传递。

有没有直接的方法告诉编译器(例如 g++)我的对象不能按值传递?

4

3 回答 3

6

您可以简单地使复制构造函数不可用。您可以通过使用 Boost 并继承 fromboost::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 回答