предположим, у меня есть такой объект:
class Spline {
public:
Spline(std::size_t const dim);
// Quite a few functions here. One of those:
vec operator()(double const t) const; // Returns vector of dimension d
}
Теперь, при большинстве применений этого класса, измерение будет уже определено во время компиляции, поэтому это было бы хорошей идеей (из соображений производительности) изменить класс следующим образом:
template <std::size_t dim>
class Spline {
public:
Spline();
// Quite a few functions here. One of those:
vec::fixed<dim> operator()(double const t) const; // Returns vector of dimension d
}
(Для тех, кому интересно, vec
и vec::fixed
- это объекты, определенные библиотекой линейной алгебры броненосца).Теперь я хотел бы, чтобы обе версии жили параллельно, чтобы иметь возможность выбирать измерение во время компиляции, а также во время выполнения.Короче говоря, я хотел бы создать эквивалент vec::fixed<dim>
как Spline::fixed<dim>
, но без реализации всех функций дважды.В частности, я должен был бы выбрать тип возвращаемого значения всех этих функций в зависимости от того, присутствует ли аргумент шаблона или нет.
Есть ли у вас какие-либо идеи о том, как мне это сделать, особенно если подумать о четком и понятном дизайне?(В надежде, что я дал понять, в чем я не совсем уверен.)