簡體   English   中英

投放boost :: fusion :: vector

[英]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');
}

所以看來我有一個答案

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;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM