c ++将非模板化特征向量作为函数参数传递并在函数中对其进行修改

时间:2013-07-17 21:12:10

标签: c++ parameter-passing eigen3

我正在实现派生类的函数成员(在基类中声明为virtual)。其中一个参数是vectorXd,它是存储操作结果的地方。

我读到了“将函数作为参数的写函数”(http://eigen.tuxfamily.org/dox/TopicFunctionTakingEigenTypes.html)并且它们的hack依赖于模板化函数,聚焦于一般的Eigen对象作为可能的参数。在我的情况下,我不认为它会起作用,因为它似乎无法混合虚拟和模板。

另一方面,我知道我的参数总是属于VectorXd类型,我甚至可以在进入函数之前将其调整到合适的大小,这样在函数内部就不需要调整大小。我正在尝试通过引用传递向量作为const的方法,并使用const_cast来进行我需要的修改,但我仍然得到一个链接错误:

  

错误LNK2001:未解析的外部符号“public:virtual void __thiscall problem :: f(类方法*,类Eigen :: Matrix const&,类Eigen :: Matrix const&)”(?f @ problem @@ UAEXPAVmethod @@ ABV?$矩阵@ N $ 0?0 $ $ 00 0A @ $ 0?0 $ 00 @ @@本征1 @ Z)

这里,'problem'是基类,'f'是函数,'method'是另一个类(我的函数中也需要该类型的对象)。

在问题的定义中我有:

virtual void f(method *m, const Eigen::VectorXd &x, Eigen::VectorXd const &y);

在衍生:问题的定义中我有:

void f(method *m, const Eigen::VectorXd &x, Eigen::VectorXd const &y) {...};

'y'是我需要存储结果的地方。有关如何实现这一目标的任何建议? 谢谢你提前。

1 个答案:

答案 0 :(得分:0)

如果您的基类是抽象的,请将方法设置为=0并保持纯virtual

如果基类不是抽象的,则可能不需要该方法。不要将它包含在基类中。

如果基类不是抽象的,但您需要能够在基类的每个实例以及派生类上执行该操作,则需要在基类和派生中实现该函数。 / p>