Use Fusion's MPL sequences adapters, so you can have:
typedef typename
mpl::transform
<
parameter_types
, from_data_source<mpl::_1>data_source_provider; // a MPL sequence
, mpl::back_inserter<mpl::vector<> >
>::type
And invoke as:
fs::invoke(f, data_source_provider());
where from_data_source<T> is defined as:
template<class T>
struct from_data_source
{
operator T() constMaybe your data_source<T>() is some singleton for the data source?
{
return data_source<T>().pop();
}
};