54 NumParams == 2 || NumParams == 3 || NumParams == 4 || NumParams == 16,
55 "Unsupported number of params; add an additional case below if necessary.");
56 constexpr std::array<
char16_t, NumParams - 1> separatorArray{ separators... };
58 Q_STATIC_ASSERT_X(separatorArray[0] != 0,
59 "Did not specify any separators for isValidNumberString.");
60 Q_STATIC_ASSERT_X(separatorArray[NumParams - 2] != 0,
61 "Did not specify enough separators for isValidNumberString.");
65 for (qsizetype i = 0; i < NumParams - 1; ++i) {
66 const qsizetype commaIndex = view.indexOf(separatorArray[i]);
69 const auto current = view.first(commaIndex).toDouble(&floatOk);
73 (*numbers)[i] = current;
75 view = view.sliced(commaIndex + 1);
77 const auto current = view.toDouble(&floatOk);
81 (*numbers)[NumParams - 1] = current;
92 NumParams == 2 || NumParams == 3 || NumParams == 4 || NumParams == 16,
93 "Unsupported number of params; add an additional case below if necessary.");
95 std::array<
double, NumParams> parameters;
96 if (!isValidNumberString<NumParams, separators...>(s, ¶meters)) {
105 if constexpr (NumParams == 2) {
106 return T(parameters[0], parameters[1]);
107 }
else if constexpr (NumParams == 3) {
108 return T(parameters[0], parameters[1], parameters[2]);
109 }
else if constexpr (NumParams == 4) {
110 return T(parameters[0], parameters[1], parameters[2], parameters[3]);
111 }
else if constexpr (NumParams == 16) {
112 return T(parameters[0], parameters[1], parameters[2], parameters[3], parameters[4],
113 parameters[5], parameters[6], parameters[7], parameters[8], parameters[9],
114 parameters[10], parameters[11], parameters[12], parameters[13], parameters[14],
118 Q_UNREACHABLE_RETURN(T{});