Re: [eigen] conservative resize ...

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


ok, it's in.

On Mon, Sep 7, 2009 at 4:47 PM, Benoit Jacob<jacob.benoit.1@xxxxxxxxx> wrote:
> 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/