在模板过载时失去了MPL?

时间:2013-07-08 21:27:54

标签: boost-mpl

我正在尝试使用boost-mpl的地图容器进行基于策略的设计POC。 (code here)

我使用mpl :: map传递我的策略,默认情况下为空:

typedef boost::mpl::map<> DefaultPolicy;

为了获得该政策,我尝试了以下方法:

typedef typename boost::mpl::at<TPolicy, LogPK, DefaultLogP>::type LoggingPolicy;

相反,我使用g ++ 4.81(以及与clang ++ 3.3等效的错误)得到以下错误:

main.cpp:49:61: error: wrong number of template arguments (3, should be 2)
    typedef typename boost::mpl::at<TPolicy, LogPK, DefaultLogP>::type LoggingPolicy;
                                                               ^

boost文档mentions at模板的三参数重载。看起来它不在#include <boost/mpl/at.hpp>。我甚至通过增强代码搜索了这个重载,没有成功。我发现的唯一模板是带有两个参数的模板。我在搜索这个问题时失败了(“at”太常见了。)

它是一个提升文档错误,还是有人发现如何在超载时使用此mpl ::

1 个答案:

答案 0 :(得分:1)

只有2型版本。不幸的是,文档是错误的并且一直是永远的。但你总是可以自己动手

template <typename Seq, typename Key, typename Def>
struct at_def
: mpl::eval_if<
    typename mpl::has_key<Seq, Key>::type,
    mpl::at<Seq, Key>,
    mpl::identity<Def>
    >
{ }