Re: [eigen] conservative resize ...

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


Sorry again for the gcc bugs.... they should be fixed by now.

I am still confused, whether it is a good idea to start polluting the
Matrix.h with expressions and forward declarations.

- Hauke

On Mon, Sep 7, 2009 at 5:50 PM, Hauke Heibel<hauke.heibel@xxxxxxxxxxxxxx> wrote:
> 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/