我無法獲取可變參數以正確傳遞給方法 - 該方法旨在選擇加權分佈內的隨機值並返回選定的結果。帶可變參數的C++方法(...)報告不正確的參數值
一個示例用法是:
int pickupType = randomManager->ByWeights(3, 0.60f, 0.20f, 0.20f);
switch(pickupType) {
// ... pickupType should be 0 to 2, which we can then branch on
}
該函數定義如下:
#include <cstdarg>
int RandomManager::ByWeights(int weightCount, ...) {
va_list argList;
// Get the total of all weights
va_start(argList, weightCount);
float weightTotal = 0;
for (int i = 0; i < weightCount; i++) {
weightTotal += va_arg(argList, float);
}
va_end(argList);
// Roll a number in that range
// ... (further processing - problem occurs above)
}
當我在調試器中運行,該呼叫到va_arg(argList, float)
將返回無用值(2.0, 1.77499998, -1.08420217e-019)
,而比在(0.60f, 0.20f, 0.20f)
中傳遞的值。
任何想法我做錯了什麼?據我所知,我完全按照規範。我一直在使用http://www.cplusplus.com/reference/cstdarg/作爲參考。
是否使用C++ 11
float
提升爲double
?如果是這樣,你應該用類型安全的可變參數模板替換它。雖然我在這裏看不到任何問題。 – chris 2013-05-09 20:47:16Eww,var-args總是讓我生病。很多方式可能會失敗,但卻非常驚人。 – 2013-05-09 20:48:15