你真的需要编译时转换吗?两者之间存在运行时转换,所以我看不出需要:
vector2<int, char> a(13, 'b');
vector<int, char> b = a;
然而,我试图玩弄。我对我的答案不满意,但也许你可以努力找到更好的东西。
我希望能够使用一些元功能,但这似乎超出了我的能力范围。此外,使用这种方法,您需要根据不同的值多次定义它。
也许更好的解决方案是首先转换为元组......</p>
#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');
}