Russian Qt Forum

Программирование => С/C++ => Тема начата: Igors от Февраль 02, 2017, 16:59



Название: Не ложится template
Отправлено: Igors от Февраль 02, 2017, 16:59
Добрый день

Псевдокод
Код
C++ (Qt)
// импорт данных из одного формата в другой
void ReadFrame( SrcNode * src, DstNode * dst, int frame )
{
// читаем входное значение параметра Intensity если оно анимировано
SrcProperty<srcDouble> & srcIntensity = src->Intensity();  
if (srcIntensity .IsAnimated()) {
   srcDouble srcValue = srcIntensity.EvaluateValue(frame);
   double currentValue = MaybeConvertValue(srcValue);
 
// если входное != имеющемуся дефаулту
// то устанавливаем выходное для данного фрейма
  DstChannel & dstChannel = dst->GetChannel(ID_INTENSITY);
  double defaultValue = dstChannel.GetDefault();
  if (fabs(currentValue - defaultValue) > epsilon)
    dstChannel.SetFrameValue(value, frame);
}
 
// все по новой для след параметра
SrcProperty<srcRGB> & srcColor = srcNode->Color();
...  
}
 
Ну и так неск десятков раз, повторы/дубляж очевидны. По поводу MaybeConvertValue - там вариантов немного. 4-5. Для примера выше srcDouble это просто double (typedef). Для векторов double[3] <-> QVector3D, ну и в одном случае надо домножить на константу

Пытался с template, но как-то монструозно выходит. Что посоветуете?

Спасибо


Название: Re: Не ложится template
Отправлено: Racheengel от Февраль 02, 2017, 21:51
Сделать по функции на каждый тип srcDouble, зачем тут темплейты..