C++ 铸造boost::fusion::vector

C++ 铸造boost::fusion::vector,c++,boost,boost-fusion,C++,Boost,Boost Fusion,boost::fusion::vector的编号形式如下 template <class T1> class vector1; template<class T1, class T2> class vector2; 模板 类向量1; 模板 类向量2; 等等 变量形式看起来像 template<class T1 = boost::fusion::void_, class T2 = boost::fusion::void_> class vector;

boost::fusion::vector的编号形式如下

template <class T1>
class vector1; 

template<class T1, class T2>
class vector2; 
模板
类向量1;
模板
类向量2;
等等

变量形式看起来像

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;
vector2a(13,'b');
向量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');
}
#包括
#包括
#包括
#包括
使用名称空间boost::fusion;
模板
结构铸件{
typedef typename result_of::at_c::type T1;
typedef typename result_of::at_c::type T2;
类型定义向量类型;
};
int main(int,char**){
向量2a(13,'b');
typedef cast::type casted\u t;
铸造其他(10,'f');
}

看来我有答案了

using numbered_vector = fusion::vector3<int, char, float>

   struct as_vvector
    {
        template <class T>
        class result;

        template <class Self, class ... Args>
        struct result <Self(Args...)> {
            using type = fusion::vector<
                typename std::remove_reference<Args>::type...>;
        };
    };

    using variadic_vector =
        typename fusion::result_of::invoke<
                    as_vvector, numbered_vector>::type;
使用编号的_vector=fusion::vector3
结构作为_vvector
{
模板
班级成绩;
模板
结构结果{
使用type=fusion::vector<
typename std::remove_reference::type…>;
};
};
使用变量u向量=
typename fusion::result_of::invoke<
作为向量,编号的向量>::类型;

您是否尝试过重新解释演员阵容?顺便说一句,“可变”形式不是可变的……我需要编译时强制转换
static\u cast
const\u cast
reinterpret\u cast
是编译时<代码>动态_cast不是。是。fusion有Boost::fusion::result of::as_vector元函数,它返回Boost::fusion::vector的编号形式,它的工作原理与您所说的完全相同。它定义了从0到50个元素。所以现在我需要写这么大的一段代码。但我希望那一定是更好的。