2013-07-08 29 views
1

我正在嘗試使用boost-mpl的地圖容器來執行基於策略的設計的POC。 (code here)在模板超負荷缺失時提升MPL?

我繞過使用MPL ::地圖,默認情況下是空的我的政策:

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

獲得策略我試過如下:

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

相反,我m使用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>。我甚至通過boost代碼搜索了這個超載,但沒有成功。我發現的唯一模板是有兩個參數的模板。我在搜索這個問題上失敗(「at」太常見了)。

這是一個助推文檔錯誤,或有人發現如何使用此mpl ::在超載?

+1

* facepalm *。我終於找到了這個(至少)三年前的文檔錯誤[trac issue](https://svn.boost.org/trac/boost/ticket/3982)。 – madidier

回答

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> 
    > 
{ }