concatenate boost :: mpl :: string

时间:2010-11-02 11:57:28

标签: c++ string boost boost-mpl

如何连接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

  

2 个答案:

答案 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;
}