[eigen] comma initializers, perfect forwarding and variadic templates

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

dear Eigen devs, first of all, thank you for this great library !

now, I have a feature request ( unless I missed an already existing way to do it, of course ).

I need to comma initialize some Eigen matrices by perfect-forwarding a parameter pack in a variadic template; clearly, this will be easily possible with c++17 fold expressions, but ,as of now, we have no ready made solution ( as far as I can tell ).

Yet, this can be easily implemented in c++11<= compilers < c++17, something equivalent to

template < typename H >
auto&& CommaUnPack( H&& head ){ return std::forward<H>(head); }


template < typename H, typename S, typename... T >
auto&& CommaUnPack( H&& head, S&& secnd, T&&... args )
    return CommaUnPack( std::forward<H>(head).operator,( std::forward<S>(secnd) ), std::forward<T>(args)... );

to be used as

CommaUnPack( SomeEigenExpr << std::forward<decltype(head)>(head), std::forward<decltype(tail)>(tail)... );

// or anything equivalent, like the possibly more consistent ( SomeEigenExpr << std::forward<decltype(head)>(head) ).finished_unpack( std::forward<decltype(tail)>(tail)... )
// or ...

note that, given the existing comma initializer implementation, this should never create dangling references and hence be relatively safe to use.
I know we can do it via library solutions offered by boost & others, but still, I think this would be a useful addition to Eigen initialization tools. What do you think ?

thank you, MJ

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