如何连接boost :: mpl :: string? 以下代码产生错误:
#include <iostream>
#include <boost/mpl/vector.hpp>
#include <boost/mpl/string.hpp>
#include <boost/mpl/fold.hpp>
#include <boost/mpl/placeholders.hpp>
#include <boost/mpl/push_back.hpp>
typedef boost::mpl::vector<
boost::mpl::string<'ab'>,
boost::mpl::string<'cd'>,
boost::mpl::string<'ef'>
> slist;
typedef boost::mpl::fold<
slist,
boost::mpl::string<>,
boost::mpl::push_back<boost::mpl::_1, boost::mpl::_2>
>::type string;
int main() {
std::cout << boost::mpl::c_str<string>::value << std::endl;
}
完整来源:http://liveworkspace.org/code/31902a4b1b0831d054119bc0b8923cb6 错误:
source.cpp中包含的文件:3:0: string.hpp:实例化 “增强:: MPL :: push_back_impl&LT; 升压:: MPL :: string_tag
:: apply,boost :: mpl :: string&lt; 24930&gt; &GT;': 提升/ MPL / push_back.hpp:32:1:
实例化 “增强:: MPL ::的push_back&LT; boost :: mpl :: string&lt;&gt ;, boost :: mpl :: string&lt; 24930&gt; 'boost / mpl / aux_ / has_type.hpp:20:1:
从'const bool实例化 升压:: MPL :: AUX :: has_type&LT; 提高:: MPL ::的push_back, 升压:: MPL ::串LT; 24930&GT; &gt;中 MPL _ :: bool_ :: value'boost / mpl / aux_ / has_type.hpp:20:1:
实例化 “增强:: MPL :: AUX :: has_type&LT; 提高:: MPL ::的push_back, 升压:: MPL ::串LT; 24930&GT; &gt;中 MPL _ :: bool_ 'boost / mpl / aux_ / preprocessed / gcc / quote.hpp:56:5: 从'boost :: mpl :: quote2&lt;实例化 提高:: MPL ::的push_back :: apply,boost :: mpl :: string&lt; 24930&gt; &GT;” 提升/ MPL / aux_ /预处理/ GCC / apply_wrap.hpp:49:1: 实例化 “增强:: MPL :: apply_wrap2&LT; 提高:: MPL :: quote2, 升压:: MPL ::串LT;&gt;中 升压:: MPL ::串LT; 24930&GT; 'boost / mpl / aux_ / preprocessed / gcc / bind.hpp:207:21: 从'boost :: mpl :: bind2&lt;实例化 提高:: MPL :: quote2, mpl _ :: arg&lt; 1&gt;,mpl _ :: arg&lt; 2&gt; :: apply,boost :: mpl :: string&lt; 24930&gt; &GT;” 提升/ MPL / aux_ /预处理/ GCC / apply_wrap.hpp:49:1: 实例化 “增强:: MPL :: apply_wrap2&LT; 提高:: MPL ::保护&LT; 提高:: MPL :: bind2, mpl _ :: arg&lt; 1&gt;,mpl _ :: arg&lt; 2&gt; &gt;,0 ,boost :: mpl :: string&lt;&gt ;, boost :: mpl :: string&lt; 24930&gt; 'boost / mpl / aux_ / preprocessed / gcc / apply.hpp:73:1: 从'boost :: mpl :: apply2&lt;实例化 提高:: MPL ::的push_back, MPL _ :: ARG&LT 2 - ; &gt;,boost :: mpl :: string&lt;&gt;, 升压:: MPL ::串LT; 24930&GT; 'boost / mpl / aux_ / preprocessed / gcc / fold_impl.hpp:87:85: 实例化 “增强:: MPL :: AUX :: fold_impl&LT; 3,boost :: mpl :: v_iter&lt; 提高:: MPL :: vector的, 升压:: MPL ::串LT; 25444&gt;中 升压:: MPL ::串LT; 25958&GT; &gt;,0l ,boost :: mpl :: v_iter&lt; 提高:: MPL :: vector的, 升压:: MPL ::串LT; 25444&gt;中 升压:: MPL ::串LT; 25958&GT; &gt;,3l ,boost :: mpl :: string&lt;&gt ;, boost :: mpl :: push_back, MPL _ :: ARG&LT 2 - ; &GT; 'boost / mpl / fold.hpp:39:18:从'boost :: mpl :: fold&lt;实例化 提高:: MPL :: vector的, 升压:: MPL ::串LT; 25444&gt;中 升压:: MPL ::串LT; 25958&GT; &GT; ,boost :: mpl :: string&lt;&gt ;, boost :: mpl :: push_back, MPL _ :: ARG&LT 2 - ; &GT; 'source.cpp:18:2:从这里实例化string.hpp:207:53:错误: '价值'不是其成员 '增强:: MPL ::串LT; 24930&GT;'在档案中 包括在内 boost / mpl / back_inserter.hpp:18:0,来自 升压/ MPL / aux_ / inserter_algorithm.hpp:18, 来自boost / mpl / copy.hpp:20,来自 string.hpp:26,来自source.cpp:3: boost / mpl / push_back.hpp:In 实例化 “增强:: MPL ::的push_back&LT; 提高:: MPL ::的push_back, 升压:: MPL ::串LT; 24930&GT; &gt;中 升压:: MPL ::串LT; 25444&GT; ':boost / mpl / aux_ / has_type.hpp:20:1:
从'const bool实例化 升压:: MPL :: AUX :: has_type&LT; 升压:: MPL ::的push_back&LT; 提高:: MPL ::的push_back, 升压:: MPL ::串LT; 24930&GT; &gt;中 升压:: MPL ::串LT; 25444&GT; ,mpl _ :: bool_ :: value'boost / mpl / aux_ / has_type.hpp:20:1:
实例化 “增强:: MPL :: AUX :: has_type&LT; 升压:: MPL ::的push_back&LT; 提高:: MPL ::的push_back, 升压:: MPL ::串LT; 24930&GT; &gt;中 升压:: MPL ::串LT; 25444&GT; ,mpl _ :: bool_ 'boost / mpl / aux_ / preprocessed / gcc / quote.hpp:56:5: 从'boost :: mpl :: quote2&lt;实例化 升压:: MPL ::的push_back
答案 0 :(得分:6)
#include <iostream>
#include <boost/mpl/vector.hpp>
#include <boost/mpl/string.hpp>
#include <boost/mpl/fold.hpp>
#include <boost/mpl/front.hpp>
#include <boost/mpl/deref.hpp>
#include <boost/mpl/placeholders.hpp>
#include <boost/mpl/push_back.hpp>
using namespace boost;
typedef boost::mpl::vector<
boost::mpl::string<'a','b'>,
boost::mpl::string<'c','d'>,
boost::mpl::string<'e','f'>
> slist;
typedef boost::mpl::reverse_fold<
slist,
mpl::string<>,
boost::mpl::copy<mpl::_1, mpl::back_inserter<mpl::_2> >
>::type string;
int main() {
std::cout << boost::mpl::c_str<string>::value << std::endl;
}
答案 1 :(得分:2)
//it's very easy to do this to have the same out put: abcdef
#include <boost/mpl/string.hpp>
#include <iostream>
typedef mpl::string<'ab','cd','ef'> string;
int main() {
std::cout << mpl::c_str<string>::value << std::endl;
}