您是否確實需要編譯時間轉換?有兩間運行時轉換,所以我真的不能看到需要:
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');
}
你嘗試了'的reinterpret_cast <>'?順便說一下,「variadic」形式不是可變參數... – Walter
我需要編譯時鑄件 – Andigor
'static_cast <>','const_cast <>'和'reinterpret_cast <>'是編譯時。 'dynamic_cast <>'不是。 – Walter