Параметры шаблона Struct и Tuple в D

Можно ли написать одну шаблонную функцию для увеличения (числовых) полей разных структур? Например:

struct Color
{
    ubyte a,r,g,b;
}

struct Point
{
    double x, y;
}

Я пробовал что-то вроде этого:

T update(T, A)(T t, A a)
if (is(T == struct))
{
    auto vals = t.tupleof;
    foreach (i; 0 .. vals.length) {
        vals[i] += a; // error: i cannot be read at compile time
    }
    return T(vals); // convert back to struct
}

Я также пробовал писать шаблоны функций, которые принимают кортежи, но кортежи всегда расширяются, что не позволяет компилятору сопоставить правильный шаблон. Спасибо.

7
задан YGL 11 June 2012 в 04:32
поделиться