3 //////////////////////////////////////////////////////////////////////
 
     4 // Named "function" parameters
 
     5 //////////////////////////////////////////////////////////////////////
 
    14   named_fn() : _id(0), _val(1), _dim(2) {}
 
    15   named_fn& id(int p)     { _id  = p ; return *this; }
 
    16   named_fn& val(double p) { _val = p ; return *this; }
 
    17   named_fn& dim(int p)    { _dim = p ; return *this; }
 
    20     //Itt van maga az algoritmus
 
    26 //named_fn().id(3).val(2);
 
    27 //named_fn().dim(4).id(3);
 
    30 //////////////////////////////////////////////////////////////////////
 
    31 // Named class template parameters (A)
 
    32 //////////////////////////////////////////////////////////////////////
 
    34 template<class A=int,class B=double>
 
    42   template <class T> class SetAType : public Named_T<T,Btype> { };
 
    43   template <class T> class SetBType : public Named_T<Atype,T> { };
 
    46 // Named_T<>::SetAType<double>::SetBType<double>
 
    48 //////////////////////////////////////////////////////////////////////
 
    49 // Named class template parameters (A)
 
    50 //////////////////////////////////////////////////////////////////////
 
    58 template<class TR=_NTR>
 
    63   typedef typename TR::Atype Atype;
 
    64   typedef typename TR::Btype Btype;
 
    70   struct ATR : public TR {
 
    75   class SetAType : public Named_TR<ATR<T> > { };
 
    78   struct BTR : public TR {
 
    82   class SetBType : public Named_TR<BTR<T> > { };
 
    85   Named_TR<TR> &setA(Atype _a) { a=_a; return *this;}
 
    86   Named_TR<TR> &setB(Btype _b) { b=_b; return *this;}
 
    92   //////////////////////////////////////////////////////////////////////
 
    94   SetAType<T> SETA(T t) { SetAType<T> r; r.a=t; r.b=b; return r;}
 
    96   SetBType<T> SETB(T t) { SetBType<T> r; r.a=a; r.b=t; return r;}
 
   101 //   Named_TR<>::SetAType<double> nt;
 
   102 //   Named_TR<>::SetBType<double>::SetAType<double> nt2;
 
   103 //   nt2.setA(5).setB(6).run();
 
   106 //   Named_TR<>().SETA(5.2).SETB(x).run();
 
   108 //   struct MyTr : public _NTR { typedef float Btype; };
 
   111 //     Named_TR<MyTr> d2; d2=d2;
 
   115 // Sajnos ezt csak a fuggvenyen kivul lehet deklaralni:
 
   116 struct MyTr : public _NTR { typedef float Btype; };
 
   118 typedef Named_T<> Named_TN;
 
   124   Named_T<>::SetAType<double> b;b=b;
 
   125   Named_T<>::SetAType<double>::SetBType<int> c;c=c;
 
   128   Named_TR<>::SetAType<double> b2;b2=b2;
 
   129   Named_TR<>::SetAType<double>::SetBType<int> c2;c2=c2;
 
   132   Named_TR<MyTr> d2; d2=d2;
 
   135   named_fn().id(3).val(2);
 
   136   named_fn().dim(4).id(3);
 
   138    Named_TR<>::SetAType<double> nt;
 
   139    Named_TR<>::SetBType<double>::SetAType<double> nt2;
 
   140    nt2.setA(5).setB(6).run();
 
   143    Named_TR<>().SETA(5.2).SETB(x).run();