从boost :: mpl定义成员变量:vectortypelist

问题描述 投票:0回答:1

我计划使用此类使用如下 -

typedef Demo< boost::mpl::vector< int, float, long > > D1;
D1 d;
D1::Dim<0>::Type i = d.GetElement<0>();
我很想知道是否有更好的方法来声明这些元素,而不是硬编码和重复其声明(和返回) - 某种东西(可能是)像具有异质类型的数组,并且更简单地访问了元素。

注:此代码可能具有编译器错误(我没有测试),但我希望它传达我的问题。

您应该找到一种从打字员创建元组的方法。
这是一篇文章,它似乎描述了如何使用C ++ 11壮举来完成的。
Http://www.devx.com/cplus/article/41533/1954

斯蒂芬·拉瓦瓦伊(Stephen Lavavej)也有一个

talk

在“骑本国2012”上。

c++ templates template-meta-programming boost-mpl
1个回答
0
投票

#include <iostream> #include <tuple> #include <string> #include <boost/mpl/vector.hpp> #include <boost/mpl/size.hpp> #include <boost/mpl/at.hpp> #include <boost/fusion/include/mpl.hpp> #include <boost/fusion/container.hpp> using namespace boost; using namespace std; template< typename T > class Demo { public: typedef boost::mpl::size<T> NumDimensions; template< size_t D > struct Dim { typedef typename boost::mpl::at_c< T, D >::type Type; }; template< size_t D > typename Dim<D>::Type& GetElement() { return fusion::at_c<D>(elements_); } private: typename fusion::result_of::as_vector< T >::type elements_; };

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.