Loki Library Reader-extended typelist: typelist generator, maxsizeof

Source: Internet
Author: User

The typelist _ ** macro in Loki is too difficult to use because it cannot support variable parameters.

Based on the idea of tuple in boost, this typelist_maker is implemented:

Template <class T1 = nulltype, class t2 = nulltype, class T3 = nulltype, class T4 = nulltype, class T5 = nulltype,
Class T6 = nulltype, class T7 = nulltype, class T8 = nulltype, class T9 = nulltype, class t10 = nulltype,
Class T11 = nulltype, class T12 = nulltype, class t13 = nulltype, class T14 = nulltype, class T15 = nulltype,
Class T16 = nulltype, class t17 = nulltype, class T18 = nulltype, class t19 = nulltype, class T20 = nulltype,
Class T21 = nulltype, class T22 = nulltype, class T23 = nulltype, class T24 = nulltype, class t25 = nulltype,
Class t26 = nulltype, class t27 = nulltype, class t28 = nulltype, class t29 = nulltype, class T30 = nulltype,
Class t31 = nulltype, class T32 = nulltype, class t33 = nulltype, class t34 = nulltype, class t35 = nulltype,
Class t36 = nulltype, class t37 = nulltype, class t38 = nulltype, class t39 = nulltype, class T40 = nulltype,
Class t41 = nulltype, class t42 = nulltype, class T43 = nulltype, class T44 = nulltype, class T45 = nulltype,
Class t46 = nulltype, class t47 = nulltype, class t48 = nulltype, class t49 = nulltype, class T50 = nulltype>
Struct typelist_maker
{
PRIVATE:
Typedef typelist_50 (T1, T2, T3, T4, T5, T6, T7, T8, T9, T10,
T11, T12, t13, T14, T15, T16, t17, T18, t19, T20,
T21, T22, T23, T24, t25, t26, t27, t28, t29, T30,
T31, T32, t33, t34, t35, t36, t37, t38, t39, T40,
T41, t42, T43, T44, T45, t46, t47, t48, t49, t50) tmplist;
Public:
Typedef typename eraseall <tmplist, nulltype>: Result result;
};

Now, the world will be much more clean.

Then a small extension is maxsizeof, which takes the maximum size of a group of types.

The traditional method uses Union, and of course it is uncomfortable.

Template <class tlist>
Struct maxsizeof;

Template <>
Struct maxsizeof <nulltype>
{
Enum {value = 0 };
};

Template <class head, class tail>
Struct maxsizeof <typelist {
PRIVATE:
Enum {maxsizeoftail = maxsizeof <tail >:: value };
Public:
Enum {value = (sizeof (head)> maxsizeoftail? Sizeof (head): maxsizeoftail )};
};

 

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.