Я беру структуру, которая содержит вариационные типы, извлекает их и передает их на вызов функции.Действительное расширение шаблона?
//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 (арг) ... расширение вытаскивая арг по типу в обратном порядке. Например, ValueArray из [1, 1.4] будет вытащен как двойной, затем и int. Есть ли способ вывести аргументы правильно и переносимым образом?
Оценка аргумента выражения вызова функции (разделенные ',' s, которые не являются запятыми) * неупорядочены *. Для некоторых компиляторов, таких как g ++, порядок является справа налево, т. Е. Сначала вычисляется выражение самого правого аргумента. Кажется, ваша программа имеет Undefined Behavior. – dyp
Большинство компиляторов оценивают как справа, так и слева направо? Если это так, я могу сейчас просто справиться с этими делами. Иначе есть ли способ привязать индекс к вызову функции? – h4tch