I'll leave the last word to Klaus, of course.  Just an idea, though: it seems like an awful lot of data members to cover the various cases. If it doesn't hinder performance, would it be possible to store just a function< Real (Real,Size) > (that is, f(t,i) returns the value at time t and index i) and to treat the other cases (constant etc) as degenerate cases? It will require a few small helper classes that can be added to the cpp file, but it would probably make the whole thing clearer. It would cause some loss of performance, so it would have to be measured.