Re: [eigen] conservative resize ...

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]


Ah, the meta-selector to choose between the two paths for that function.

Since that's specific to that function, it shouldn't go in
XprHelpers.h, instead it should go in the same file where (the rest
of) that function is implemented.

The way we usually do it is rather:

template <typename Derived, typename OtherDerived, int IsVector =
Derived::IsVectorAtCompileTime>
struct resize_helper
{
 static void run(const Eigen::MatrixBase<Derived>& _this, const
Eigen::MatrixBase<OtherDerived>& other)
 {
   std::cout << "Matrix assignment" << std::endl;
 }
};

template <typename Derived, typename OtherDerived>
struct resize_helper<Derived, OtherDerived,true>
{
 template <typename Derived, typename OtherDerived>
 static void run(const Eigen::MatrixBase<Derived>& _this, const
Eigen::MatrixBase<Derived>& other)
 {
   std::cout << "Vector assignment" << std::endl;
 }
};

Then you can call it like resize_helper(a,b) and let all the template
parameters be resolved implicitly. This is less error-prone than
having to manually specify IsVector. Also note how we usually don't
put "xpr" in names since otherwise we'd have "xpr" about everywhere.

Benoit

2009/9/7 Hauke Heibel <hauke.heibel@xxxxxxxxxxxxxx>:
> On Mon, Sep 7, 2009 at 4:28 PM, Benoit Jacob<jacob.benoit.1@xxxxxxxxx> wrote:
>> There already is: MatrixBase<T>::IsVectorAtCompileTime.
>
> yes, i know.
>
> i  was thinking about something like this...
>
> template <int IsVector>
> struct resize_xpr_helper
> {
>  template <typename Derived, typename OtherDerived>
>  static void run(const Eigen::MatrixBase<Derived>& _this, const
> Eigen::MatrixBase<OtherDerived>& other)
>  {
>    std::cout << "Matrix assignment" << std::endl;
>  }
> };
>
> template <>
> struct resize_xpr_helper<1>
> {
>  template <typename Derived, typename OtherDerived>
>  static void run(const Eigen::MatrixBase<Derived>& _this, const
> Eigen::MatrixBase<Derived>& other)
>  {
>    std::cout << "Vector assignment" << std::endl;
>  }
> };
>
> - hauke
>
>
>



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/