我试图了解使用Fusion的重点,并且我对这个简单的例子感到难过:
#include <boost/fusion/include/is_sequence.hpp>
#include <boost/fusion/include/as_vector.hpp>
#include <boost/fusion/include/make_vector.hpp>
#include <boost/fusion/include/transform.hpp>
template< typename T >
struct S {
typedef T type;
};
struct S_f {
template< typename T >
struct result {
typedef typename T::type type;
};
};
int main () {
using namespace boost;
typedef fusion::vector<S<int>> from_type;
BOOST_MPL_ASSERT((fusion::traits::is_sequence< fusion::vector< int > > ));
typedef fusion::result_of::transform< from_type, S_f >::type to_type;
BOOST_MPL_ASSERT((fusion::traits::is_sequence< to_type > ));
typedef fusion::result_of::as_vector< to_type >::type value_type; // error
}
Run Code Online (Sandbox Code Playgroud)
断言通过,但value_type的typedef失败,错误如下.我无法为代码和文档之间的任何差异提供资金,也无法在stackoverflow或boost邮件列表的其他地方补救.
AFAICT代码是正确的:应用变换元函数的结果是transform_view,transform_view是一个序列,如传递断言所示.然而,as_vector元函数在transform_view上的应用失败了.是什么赋予了?!
任何帮助表示赞赏.我对混合mpl不感兴趣.我知道我可以通过MPL和一些关于类型操作的融合问题绕道而行,这些问题有关于类型操作的答案,主张MPL.根据文档,我不需要MPL.
clang++ -std=c++1z -c t.cpp
In file included …
Run Code Online (Sandbox Code Playgroud)