Я бы предположил, что для этих типов есть конструктор итератора. Если это предположение верно, то это будет так же просто, как написать что-то вроде этого:
template < typename OutputVector, typename InputVector >
OutputVector vector_cast(InputVector const& input)
{
return OutputVector(input.begin(), input.end());
}
Используйте как: compressed_vector<double> vect = vector_cast<compressed_vector<double> >(my_sparse_vector);