c – Casting boost :: fusion :: vector

boost :: fusion :: vector的编号形式看起来像

template <class T1>
class vector1; 

template<class T1, class T2>
class vector2; 

等等

可变形式看起来像

template<class T1 = boost::fusion::void_, class T2 = boost::fusion::void_>
class vector;

那么有没有办法在编译时将boost :: fusion :: vector从编号转换为可变形式?

最佳答案 你真的需要编译时演员吗?两者之间存在运行时转换,所以我无法真正看到需求:

vector2<int, char> a(13, 'b');
vector<int, char> b = a;

然而我试着玩.我对我的回答并不满意,但也许你可以努力找到更好的东西.

我希望能够使用一些元函数,但它似乎超出了我的能力.此外,使用此方法,您需要将其定义为具有不同值的次数.

也许更好的解决方案是首先转换为元组…

#include <boost/fusion/container/vector.hpp>
#include <boost/fusion/container/vector/vector10.hpp>
#include <boost/fusion/include/at.hpp>
#include <boost/type_traits/remove_reference.hpp>
using namespace boost::fusion;

template<typename NumVec2>
struct cast {
    typedef typename result_of::at_c<NumVec2, 0>::type T1;
    typedef typename result_of::at_c<NumVec2, 1>::type T2;
    typedef vector<typename boost::remove_reference<T1>::type, typename boost::remove_reference<T2>::type > type;
};

int main(int, char**){
    vector2<int, char> a(13, 'b');
    typedef cast< vector2<int,char> >::type casted_t;
    casted_t other(10, 'f');
}
点赞