|
Boost : |
Subject: Re: [boost] ΣÏεÏ: [TypeSort] Automatic type sorting
From: Mathias Gaunard (mathias.gaunard_at_[hidden])
Date: 2015-03-20 12:32:04
On 20/03/2015 17:13, costis glynos wrote:
> On 20/03/2015 16:59, costis glynos wrote:
>>> Hello,Is there any interest in a library which automatically sorts types from smallest to largest at compile time?The benefit would be the automatic Data Structure Alignment and potential improvement in performance.Foo<int,bool,Custom16ByteType,char,double,short> foo_1; //normal
>>> Foo<int,bool,Custom16ByteType,char,double,short> foo_2; //using the TypeSort
>>> output:
>>> size of foo_1 = 48
>>> size of foo_2 = 32 Kind Regards,
>
>> There is already a sort meta-function in Boost.MPL.
>> <http://www.boost.org/doc/libs/1_57_0/libs/mpl/doc/refmanual/sort.html>
>
> Sweet! Thanks for bringing this to my attention.
>
You also need to use Boost.Fusion to make it into a tuple at the end,
since this is what you want.
Here is an example:
#include <boost/mpl/sort.hpp>
#include <boost/mpl/vector.hpp>
#include <boost/mpl/sizeof.hpp>
#include <boost/fusion/include/as_vector.hpp>
#include <boost/fusion/adapted/mpl.hpp>
#include <iostream>
int main()
{
namespace mpl = boost::mpl;
namespace fusion = boost::fusion;
typedef mpl::vector<short, int, short> types;
typedef mpl::sort<types, mpl::less< mpl::sizeof_<mpl::_1>
, mpl::sizeof_<mpl::_2>
>
>::type sorted_types;
typedef fusion::result_of::as_vector<sorted_types>::type tuple;
tuple t;
std::cout << sizeof(t) << std::endl; // 8 instead of 12
}
This appears to work.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk