C++ 如何实现boost::mpl::map(或set)?

C++ 如何实现boost::mpl::map(或set)?,c++,boost,boost-mpl,C++,Boost,Boost Mpl,我想知道如何实现一个模板元编程结构,比如,一个支持元素的固定时间插入和移除以及成员资格测试的结构 在所有变通方法、宏和生成的代码后面的boost头中很难找到真正的实现。基本上,通过巧妙地使用重载。假设您想要构建一个只包含两个“元素”的映射:T-->U和X-->Y。如果我们平展所有继承层次结构,我们将得到如下类型: struct specific_mpl_map { U get(T ); Y get(X ); template <typename Anything

我想知道如何实现一个模板元编程结构,比如,一个支持元素的固定时间插入和移除以及成员资格测试的结构


在所有变通方法、宏和生成的代码后面的boost头中很难找到真正的实现。

基本上,通过巧妙地使用重载。假设您想要构建一个只包含两个“元素”的映射:
T-->U
X-->Y
。如果我们平展所有继承层次结构,我们将得到如下类型:

struct specific_mpl_map {

    U get(T );
    Y get(X );

    template <typename AnythingElse>
    void_ get(AnythingElse );

    pair<T, U> get(int_<0> );
    pair<X, Y> get(int_<1> );

    using size = int_<2>;
};
在中,哪个
使用了:

template< typename Map, typename Key >
struct m_at
{
    typedef aux::type_wrapper<Key> key_;
    typedef __typeof__( Map::value_by_key_( 
                        aux::ptr_to_ref(static_cast<Map*>(0)), 
                        static_cast<key_*>(0) )

          ) type;
};
模板
结构m_at
{
typedef aux::type_包装键;
typedef uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
辅助::ptr_至_参考(静态_转换(0)),
静态(0))
)类型;
};
其中,基空映射还定义:

template< typename Dummy = na > struct map0
{
    static aux::type_wrapper<void_> value_by_key_(map0<> const&, 
                                                  void const volatile*);
};
templatestruct map0
{
静态辅助::按键键入包装值(map0常量&,
void const volatile*);
};
template< typename Dummy = na > struct map0
{
    static aux::type_wrapper<void_> value_by_key_(map0<> const&, 
                                                  void const volatile*);
};