yuwen
yuwen

Reputation: 1

how could i use my type in Eigen to use allFInite?

I have defined a type just like

struct Mytype{
double a;
double b;
bool isfinite()
{

}
};

how could i can use allFinite in Eigen like

Eigen::Array<Mytype,4,1> Array;
array.allFinite();

i try to define like

struct Mytype{
bool isfinite()
{
 return isfinite(a)&&isfinite(b);
}
};

but it doesnot work,what should i do?

Upvotes: -1

Views: 36

Answers (1)

Homer512
Homer512

Reputation: 13438

Eigen is written to support argument-dependent lookup. So all you need to do is provide a free-standing (or friend) function called isfinite() in the same namespace.

#include <Eigen/Core>


namespace my_ns {

  struct Mytype {
    double a;
    double b;
    bool isfinite() const
    {
      return true;
    }

    friend bool isfinite(const Mytype& x)
    { return x.isfinite(); }
  };

} /* namespace my_ns */


int main()
{
  using array_t = Eigen::Array<my_ns::Mytype, Eigen::Dynamic, 1>;
  array_t x = array_t::Constant(10, {2., 3.});
  return x.isFinite().all();
}

Upvotes: 2

Related Questions