가변 형식을 포함하는 구조체를 추출하여 추출한 다음 을 기본 함수 호출에 전달합니다.유효한 템플릿 확장?
//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) ... 확장이 역순으로 args를 유형별로 철회하는 것입니다. 예를 들어 [1, 1.4]의 ValueArray는 double, then 및 int로 추출됩니다. 인수를 올바르게 그리고 이식 할 수있는 방법이 있습니까?
평가를 함수 호출의 표현식 (쉼표 연산자가 아닌','로 분리됨)은 * 정렬되지 않은 *입니다. g ++와 같은 일부 컴파일러의 경우 순서는 오른쪽에서 왼쪽입니다. 즉, 가장 오른쪽 인수 표현식이 먼저 평가됩니다. 프로그램에 정의되지 않은 동작이있는 것으로 보입니다. – dyp
대부분의 컴파일러는 오른쪽에서 왼쪽 또는 왼쪽에서 오른쪽으로 평가됩니까? 그렇다면 지금은 그 사건들을 처리 할 수 있습니다. 그렇지 않으면 함수 호출에 인덱스를 첨부 할 수 있습니까? – h4tch