On Monday, 19 June 2017 at 20:59:33 UTC, Ali Çehreli wrote:
On 06/19/2017 12:54 PM, Jean-Louis Leroy wrote:
I need to process two sequences in parallel (select some elements of sequence A depending of the corresponding element of sequence B). How can I pass two sequences to a meta-function? I tried nesting AliasSeqs
but I get Perl4 style flattening:

  AliasSeq!(AliasSeq!(int, float),
            AliasSeq!(char, double))
  -> (int,float,char,double)

I worked around the problem by passing a single AliasSeq to my
meta-function and using indexation to access the two sub-lists but now I need to process three sequences in parallel and I am looking for a
cleaner solution.



Hi Jean-Louis! :)

One option is to nest templates:

template foo(Args1...) {
    void bar(Args2...)() {
    }
}

void main() {
    foo!(int, float).bar!(char, double)();
}

Ali

Hi Ali :)

Thanks! It works perfectly for my purpose, which is to manipulate lists of types or values based on a list of types, e.g.:

  alias ParTypes = AliasSeq!(virtual!A, int, virtual!B);
  Signature!(ParTypes).UnqualArgs -> AliasSeq!(A, int, B)
  Signature!(ParTypes).VirtualArgs -> AliasSeq!(A, B)
Signature!(ParTypes).Filter!(AliasSeq!(A, int, B)) -> AliasSeq!(A, B)

J-L


Reply via email to