与fadbad的特征向量

时间:2017-08-14 12:55:40

标签: c++ eigen3

我想将Eigenfadbad一起用于自动区分。

当我乘以两个向量时

case class

我收到以下错误消息(ninja-build,gcc-7.1):

#include <iostream>
#include <fadiff.h>
#include <Eigen/Core>

int main(int argc, char *argv[])
{
    using Scalar = fadbad::F<double>;
    using VectorXs = Eigen::Matrix<Scalar, Eigen::Dynamic, 1>;

    VectorXs a(2);
    VectorXs b(2);

    Scalar c = a.transpose() * b;

    std::cout << c.x() << std::endl;
}

当我使用double作为Scalar类型时,它会编译并运行而不会出错。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

这是一个常见的问题,我想问题是fadbad公开了一个通用的隐式构造函数,使它好像可以从一切转换而来。更准确地说,std::is_convertible<X, fadbad>因此对任何类型X都返回true,包括Eigen::Matrix< fadbad >。在a * b中,其中一个因子可以解释为兼容的标量。

必须在fadbad中修复此问题,例如使用SFINAE将通用ctor仅用于有效类型。