ブースト::フュージョンを使用しています。
次のようなものがあるとしましょう。
make_vector(1, make_vector('b', 3, make_vector(4, 5.5), "six"), 7, 8)
となるような関数 f を生成したい
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]
つまり、シーケンスの平坦化されたバージョンです。
これが元のシーケンスのビューであるか、実際のベクトルであるかは気にしません。
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」を使用して、データ要素が何であるかを理解できると思います。