私はboost :: fusionを使用しています。(シーケンスの)シーケンスのシーケンスを平滑化
make_vector(1, make_vector('b', 3, make_vector(4, 5.5), "six"), 7, 8)
は私がそのようなこと
f(make_vector(1, make_vector('b', 3, make_vector(4, 5.5), "six"), 7, 8))
-> [1, 'b', 3, 4, 5.5, "six", 7, 8]
すなわちシーケンスの平坦化されたバージョンの関数fを生成します:
は、私は、次のようなものを考えてみましょう。
これが元のシーケンスのビューであるか実際のベクターであるかは関係ありません。
GCC 4.5.1でコンパイルできるのであれば、私はC++ 0xで解決しても構いません。
注:
私はデータ要素を制限するために希望されない一方で、それが助け場合、「データ」の要素全てが共通の基本クラスから派生することを要求して自由に感じます。すなわち
class DataBase {}
template <class T>
class Data : public DataBase
{
public:
Data(const T& x) : m_x(x)
T m_x;
}
template <class T>
T make_data(const T& x) { return Data<T>(x); }
はその後
make_vector(
make_data(1),
make_vector(
make_data('b'),
make_data(3),
make_vector(
make_data(4),
make_data(5.5)
),
make_data("six")
),
make_data(7),
make_data(8)
)
私は、あなたが "is_base_of" を使用して、データ要素が何であるかを作業することができます把握します。
WOW!ありがとう、私はこれを試してみると、より近くに見てみましょう。これは私が探していたブーストソースコードのいくつかのように見えます。私もHaskellのバージョンから考えていましたが、コンパイルエラーなしでenable_ifの権限を取得できませんでした。 – Clinton