我正在採取一種結構,其中包含可變類型,提取它們,並將它們傳遞給本機函數調用 。有效的模板擴展?
//ValueArray contains a vector of a variant type.
// Pulls out an argument from a ValueArray.
template<typename Arg>
inline Arg
_processParam(ValueArray& args) {
Arg arg = static_cast<Arg&>(args[ 0 ]);
args.erase(0, true);
return arg;
}
/// Do the Function call. Args is a variadic template pack.
call(fnPtr, _processParam<Args>(args)...);
/// The call expands to:
(*fnPtr)(params...);
然而,問題是_processParam(args)...擴展是按照相反的順序通過類型拉出參數。例如,[1,1.4]的ValueArray將作爲double,then和int被拉出。有沒有辦法以便攜的方式正確地提取參數?
評估論證的函數調用的表達式(用','分隔,不是逗號運算符)是*無序的*。對於像g ++這樣的編譯器,順序是從右到左的,即最右邊的參數表達式首先被計算。看起來你的程序有未定義的行爲。 – dyp
大多數編譯器是從右向左還是從左向右評估?如果是這樣,我現在可以處理這些案件。否則有沒有辦法通過函數調用附加索引? – h4tch