J'ai une fonction de modèle variadique:VARIADIC fonction C++ ne fonctionne pas lors de la récupération des arguments de type float
template<typename T, typename ArgType>
vector<T>
createVector(const int count, ...)
{
vector<T> values;
va_list vl;
va_start(vl, count);
for (int i=0; i < count; ++i)
{
T value = static_cast<T>(va_arg(vl, ArgType));
values.push_back(value);
}
va_end(vl);
return values;
}
Cela fonctionne pour certains (pour moi, étrange) configurations de T et argtype, mais pas la manière Je pense:
// v1 = [0.0, 1.875, 0.0]
vector<float> v1 = createVector<float, float>(3, 1.0f, 2.0f, 3.0f);
// v2 = [0.0, 1.875, 0.0]
vector<float> v2 = createVector<float, float>(3, 1.0, 2.0, 3.0);
// v3 = [1.0, 2.0, 3.0]
vector<float> v3 = createVector<float, double>(3, 1.0, 2.0, 3.0);
// v4 = [1.0, 2.0, 3.0]
vector<float> v4 = createVector<float, double>(3, 1.0f, 2.0f, 3.0f);
// v5 = [1.0, 2.0, 3.0]
vector<double> v5 = createVector<double, double>(3, 1.0, 2.0f, 3.0);
Pourquoi ce travail quand argtype est double (même lors du passage des flotteurs), mais pas quand il est flotter?
+1 Intéressant, je n'ai jamais su cela. – fingerprint211b
Les flotteurs sont-ils également passés en double? –
@James: oui, les flotteurs sont passés en double. –