Re: [eigen] conservative resize ... |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [eigen] conservative resize ...
- From: Hauke Heibel <hauke.heibel@xxxxxxxxxxxxxx>
- Date: Mon, 7 Sep 2009 17:50:02 +0200
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=gamma; h=domainkey-signature:mime-version:received:in-reply-to:references :date:message-id:subject:from:to:content-type :content-transfer-encoding; bh=04QovLiYUZ3jaz5O+BeCzOWSec1Zc1XoLkYEjHXfC+w=; b=nPbm3KW4MH3HQLw+zFxeIs0xBW61G76b+SIL//BrN1UdmQDegxiIktpvvMFl6mqOin F0mApBCf8le//kzfAysrSYEs2yDpr+AKY0vP7TKQxbFRyzmFDMoUY5i8ZrzHd0wZNRTx QavTHUEtNNGU5kHDVGTE7xtzQE5t3cVGDxM1Q=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; b=oBYQtnSvDkyucl6/A2o7ZkMicm5CLhpHgm2hkxGbSkU9+3VDC4GQBf8GDa2zpBvwg8 BkRMHPI1EKYZ/8QoL2x21QPX8AzoEWsbWbtUdQ1ahYPB0vSQJNJ5z4BzIQYck3k8N7Kk euqSWj8VU0IYLefEAPBkSiNETpSCPBlu1RKgs=
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
>>
>>
>>
>
>
>