Re: [eigen] conservative resize ... |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/eigen Archives
]
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [eigen] conservative resize ...
- From: Benoit Jacob <jacob.benoit.1@xxxxxxxxx>
- Date: Mon, 7 Sep 2009 10:47:32 -0400
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.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=33EgWyZ9rhUZfqJrmEHOoEHAiCPSlbr2LEXzHNtkMIc=; b=Eqm6GCx2DaOj6JfRRZwH2J/cTECxg4eqvKaT0bAxVs2A+NnBWh/oJv2usLB+M2ZlAD mAgWWMbjcujTndbaK7HHZUhhks9oNbaW8eoi/j3opjaNKQa/qMc6fguixHe5hJlgdkH+ gdCi23GZavx4D7BkJ1qu1l9vCyzllslRcevIo=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :content-type:content-transfer-encoding; b=fesz8E8Cun0yBBWJJCra80Q1IQ1PM8aR0VdLtDPDpwpCvbEBT7kZTTumsfoiQI335W pfP0WIM9g1Rg5ExrwbpP3nT4vDg63kbtlEZdMF6SqMeORfSIzw3gz6K/nEwN7Gnr6tCB t2Qv7h23n9Kv/ewHbR4BQYJOSrG+YK06d/MyY=
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
>
>
>