Поскольку _mm_extract_epi64()
принимает в качестве параметра константу, которая должна быть известна во время компиляции, я пытаюсь реализовать конструктор с шаблоном целочисленной константы:
union Packed64 {
double _f64;
float _f32[2];
uint64_t _u64;
int64_t _i64;
uint32_t _u32[2];
int32_t _i32[2];
uint16_t _u16[4];
int16_t _i16[4];
uint8_t _u8[8];
int8_t _i8[8];
Packed64() { }
template<uint8_t taAt> explicit Packed64(const __m128i& vect, const uint8_t taAt)
: _i64(_mm_extract_epi64(vect, taAt)) { }
explicit Packed64(const uint64_t valU64) : _u64(valU64) { }
};
Однако с этим синтаксисом, когда я пытаюсь использовать конструктор вроде
const __m128i a = /* calculated here */;
Packed64 p64(a, 0);
Я получаю сообщение об ошибке компилятора в последней строке выше:
error C2661: 'Packed64::Packed64': no overloaded function takes 2 arguments
Не могли бы вы помочь с правильным синтаксисом?