Явное ключевое слово на конструкторе мультиаргумента?

Необходимо быть в состоянии использовать атрибуты StructLayout и FieldOffset для фальсифицирования объединения для простых данных как плавания и ints.

[StructLayout(LayoutKind.Explicit, Size=4)]
private struct IntFloat {
    [FieldOffset(0)]
    public float floatValue;

    [FieldOffset(0)]
    public int intValue;

    // redundant assignment to avoid any complaints about uninitialized members
    IntFloat(int x) {
        floatValue = 0;
        intValue = x;
    }

    IntFloat(float x) { 
        intValue = 0;
        floatValue = x;
    }

    public static explicit operator float (IntFloat x) {
        return x.floatValue;
    }

    public static explicit operator int (IntFloat x) { 
        return x.intValue;
    }

    public static explicit operator IntFloat (int i) {
        return new IntFloat(i);
    }
    public static explicit operator IntFloat (float f) { 
        return new IntFloat(f);
    }
}

Тогда переводящий InvSqrt легок.

34
задан LiraNuna 13 July 2009 в 10:20
поделиться

1 ответ

В C ++ 11 конструкторы с несколькими параметрами могут быть неявно преобразованы в с инициализацией скобок.

Однако до C ++ 11 явный применялся только к одиночным конструкторы аргументов. Для конструкторов с несколькими аргументами он был проигнорирован, и не оказал никакого влияния .

52
ответ дан 27 November 2019 в 16:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: