我正在尝试使用 boost-mpl 的地图容器进行基于策略的设计的 POC。(代码在这里)
我使用 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 文档提到了 at 模板的三个参数重载。看起来它不在#include <boost/mpl/at.hpp>
. 我什至通过 boost 代码搜索了这个重载,但没有成功。我发现的唯一模板是带有两个参数的模板。我在谷歌上搜索这个问题失败了(“at”太常见了)。
这是一个提升文档错误,还是有人发现如何使用这个 mpl::at 重载?