次の構文を使用して、タイプのmplベクトルを作成します。タイプとmpl :: vectorを新しいベクトルに結合する方法
struct Struct1{
typedef int type;
};
struct Struct2{
typedef float type;
};
template<typename T> struct TypeReader{
typedef typename T::type type;
};
int main()
{
typedef bm::vector<Struct1,Struct2> MPLVector;
typedef bm::transform<MPLVector, TypeReader<bm::_1>>::type TypeList;
static_assert(bm::equal<TypeList, bm::vector<int,float> >::value, "Is not same");
}
これまでのところ、これは期待どおりに機能します。今私がしたいのは以下の通りです
struct Struct3{
typedef bm::vector<char,double> type;
};
typedef bm::vector<Struct1,Struct2,Struct3> MPLVector;
typedef bm::transform<MPLVector, TypeReader<bm::_1>>::type TypeList;
static_assert(bm::equal<TypeList, bm::vector<int,float,char,double> >::value, "Is not same");
これは機能しません。では、MetaFunction構造体を、typedefとmpl :: vectorの両方で動作するように変更する必要はありますか?
これが不可能な場合は、すべての型typedefをmplベクトルに変更するとこれを行うことは可能でしょうか?
完全な答えをありがとう。フォールドは私の心には決して来なかったが、あなたの解決策は本当にいいです。 – mkaes
良い答え。私は 'is_sequence'について知らなかった。 – pmr