我正在尝试使用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:错误:错误的模板参数(3,应该是2)类型名称boost::mpl::at::type LoggingPolicy;
boost文档提及是at模板的三个参数重载.它看起来好像不在#include <boost/mpl/at.hpp>。我甚至通过boost代码搜索了这个过载,但没有成功。我找到的唯一模板是一个有两个参数的模板。我在谷歌搜索这个问题时失败了(" at“太常见了)。
这是一个boost文档错误,还是有人知道如何使用这个mpl::at重载?
发布于 2013-08-30 23:37:49
只有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>
>
{ }https://stackoverflow.com/questions/17536268
复制相似问题