我正在使用 boost::fusion。
可以说我有以下内容:
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 中的解决方案。
笔记:
虽然我不想限制数据元素,但如果有帮助,请随意要求“数据”元素全部派生自一个公共基类。
IE
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”来计算出数据元素是什么。