Есть некий контейнер, в котором лежат какие то структуры. Есть некая функция, работающая с этим контейнером (например контейнер многомерный, а ф-я делает интерполяцию, вообще есть много вариантов).
Пока в контейнере даблы, или типы для которых перегружены необходимые арифметические операции, все работает. Но возникает необходимость обрабатывать: 1) некоторое поле структуры (элемента контейнера) 2) результат вызова некоторой сторонней ф-ии для структуры
напр, в контейнере лежат структуры
struct cell{ double rho, T; };
double energy( const cell& c ){ return rho*T; }
Вопрос - как правильно организовать ф-ю интерполяции (она шаблонная) что бы не было накладных расходов и оверхеда по коду?
Мне пока пришло в голову только такое решение:
template <class T> struct acces_as_is{
typedef r_type T;
static const T get( const T& x){ return x; }
};
template <class C, typename A=access_as_is<typename C::cell_type> > typename A::type_r interpolate ( const C & arr, ...){
...
... = A::get( arr[...] ) ;
...
}
C::cell_type - тип элемента в контейнере. Но у меня смутное ощущение, что я изобретаю велосипед... да и использование будет выглядеть кривовато.